 #  Did I Just Solve Joomla Bot Spam With HashCash? 

 

  ![Did I Just Solve Joomla Bot Spam With HashCash?](https://cdn.richeyweb.com/images/articles/plg_captcha_hashcash/blog-post/hashcash-blog-post.webp)    Eleven years ago, I stumbled across a [technical paper from 2002 by Adam Back](http://www.hashcash.org/papers/hashcash.pdf). It was about HashCash—a proof-of-work system designed to make spammers’ lives miserable by forcing their machines to grind through heavy calculations. I thought, “This could work for bot [spam](/blog/development/the-humbling-art-of-free-software "The Humbling Art of Free Software") in [Joomla](/blog/hosting/cron-vs-joomla-lazy-scheduler-and-webcron "Cron vs Joomla Lazy Scheduler and WebCron") forms,” and built my first [Captcha - HashCash](/software/joomla/plugins/captcha-hashcash) [plugin](/blog/development/bug-reports-a-developers-best-friend-not-a-burden "Bug Reports: A Developer's Best Friend, Not a Burden"). Little did I know, someone else had tried it before me—and their version vanished after landing on the CVE list in 2006. If I’d known, I might’ve picked a different name. But that’s ancient history, and my [HashCash](/blog/development/how-a-bug-report-made-hashcash-smarter "How a Bug Report Made HashCash Smarter")? It’s still kicking.

Fast forward to a few weeks ago. I was deep into a Joomla 5 rewrite of the plugin, tinkering with a new “wait-for-interaction” feature—making the calculation start only when a user engages with the form. It’s a slick way to trip up bots that either rush in or dawdle too long. Then, mid-code, I had a lightbulb moment: what if I could detect bots and punish them? Not just block the bot spam —make them regret ever sniffing around my site.

## The Punishment Play

The idea was simple but devious. If the plugin spots suspicious activity (a bot attempting to trigger the calculation to start), it tweaks the calculation to become unsolvable. Bots get stuck churning CPU cycles forever, chasing a solution that doesn’t exist. And if they somehow magic up an answer? It’s still the wrong answer. I coded it up, flipped it off by default (gotta give folks a choice), and threw it to the Joomla forums for feedback. The response? A unanimous “Heck yes—if they’re abusing your site, let ‘em burn.” Version 5.2.7 was born.

## From 2002 to 2025: A Quiet Victory

HashCash isn’t new—Adam Back nailed the concept over two decades ago. My spin leans on modern [JavaScript](/test-article "Shader BG Test"), the Web Cryptography API, and a bit of Joomla magic to keep it invisible and [lightweight](/blog/development/generator-tag-claim-your-joomla-sites "Generator Tag: Claim Your Joomla Sites"). No mangled text or “click the crosswalk” nonsense—just a silent shield. Users fill out forms without a hitch; bots hit a wall. I’ve been running it on my contact page, and here’s the kicker: not a single spam email in weeks. Weeks! After years of tweaking difficulty levels (1 to 4, depending on how mean I’m feeling) and adding tricks like delayed calculations, this latest twist feels like the kill shot.

## From Blocking to Watching

While wrestling with the Joomla 5 rewrite, I had a brainwave: blocking bots is solid, but why not spy on them too? So, I baked in a feature to capture [analytics](/blog/development/server-timing-for-geoip-data-delivery-to-achieve-gdpr-compliance "Server-Timing for GeoIP Data Delivery to Achieve GDPR Compliance") on every bot HashCash catches. Now, when a [script](/blog/personal/someone-elses-code "Someone Else’s Code") stumbles over the delayed calculation or hammers the form too hard, I snag a snapshot: their IP address, the exact time they hit, their user agent (that little “I’m a browser, honest!” lie bots love), plus some nerdy event details—whether it’s a legit interaction, the form they targeted, and if it’s fishy enough to raise an eyebrow.

![capturing bot events in google analytics](https://cdn.richeyweb.com/images/articles/plg_captcha_hashcash/blog-post/ga-event.webp)

It’s not just a log—it’s a window into the chaos. Right now, it’s raw intel sitting pretty in the plugin, but the next move’s brewing: feeding it into [Google Analytics](/blog/hosting/search-engine-optimization-insights-from-google-on-ai-and-seo-experts "Search Engine Optimization: Google on AI and SEO Experts") as a custom event. Soon, I’ll see it all—how many bots crash the party, when they strike, and what they’re pretending to be. No more blind defense; it’s like flipping on a spotlight and watching them scatter. For now, it’s me, a spam-free inbox, and a growing stash of bot secrets. Big plans ahead.

## Did I Solve Bot Spam?

So, did I solve Joomla bot spam? I’m tempted to say yes—or at least, “Yes, for me.” My inbox is clean, my users aren’t annoyed, and somewhere out there, a bot’s CPU is crying. The plugin’s not a silver bullet—nothing is—but it’s a damn good stake through the heart of form abuse. It’s come a long way from that scrappy idea 11 years ago, inspired by a paper I read on a whim. I didn’t set out to reinvent the wheel; I just wanted something that worked without making users hate me.

In reality - no, I didn't solve anything. I did, however, make it MUCH more expensive to spam Joomla forms that are using HashCash. Not in the way Adam Back envisioned (with CPU cycles), but by requiring much more sophisticated tools to circumvent the bot checks. They're pretty bulletproof, unless you're using a scripted/headless browser to manipulate the form using mouse and keyboard inputs. That's the expensive part. Scripted/Headless [automation](/blog/development/one-sh-tty-email-that-made-me-finally-do-something-about-spam "One Sh*tty Email That Made Me Finally Do Something About Spam") costs a lot more than a JavaScript someone bought off some guy on the dark web, and my plugin can catch some of those too. I'm OK with partial success.

The new version of HashCash is a far cry more effective than ReCaptcha has been for the past year. Slowing them down to a crawl and forcing them to spend more money seems like a [win](/blog/hosting/microsoft-deliverability-sendgrid-and-blacklists "Microsoft Deliverability - SendGrid and Blacklists") to me.

## What’s Next?

You can grab Captcha - HashCash and try it yourself—hit the Contact Us link below and see (or rather, don’t see) it in action. Crank the difficulty, toggle the punishment mode if you’re feeling spicy, and watch your spam dry up. Did I solve bot spam for Joomla? Maybe I did, maybe I didn’t—but I’m calling this one a win. Eleven years, a few forum high-fives, and a lot of bot tears later, I’ll take it.



- [      email ](mailto:?subject=Did+I+Just+Solve+Joomla+Bot+Spam+With+HashCash%3F&body=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fdid-i-just-solve-joomla-bot-spam-with-hashcash)
- [      facebook ](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fdid-i-just-solve-joomla-bot-spam-with-hashcash)
- [      x-twitter ](https://twitter.com/intent/tweet?text=Did+I+Just+Solve+Joomla+Bot+Spam+With+HashCash%3F%3A+https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fdid-i-just-solve-joomla-bot-spam-with-hashcash)
- [      linkedin ](http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fdid-i-just-solve-joomla-bot-spam-with-hashcash&title=Did+I+Just+Solve+Joomla+Bot+Spam+With+HashCash%3F&summary=Eleven+years+ago%2C+I+stumbled+across+a+technical+pa...)
- [      pinterest ](http://pinterest.com/pin/create/button/?url=https%3A%2F%2Fwww.richeyweb.com%2Fblog%2Fdevelopment%2Fdid-i-just-solve-joomla-bot-spam-with-hashcash&media=https%3A%2F%2Fwww.richeyweb.com%2Fimages%2Farticles%2Fplg_captcha_hashcash%2Fblog-post%2Fga-event.webp&description=Did+I+Just+Solve+Joomla+Bot+Spam+With+HashCash%3F)
 


 

   [  Previous article: My Software Powers Joomla’s Volunteer Portal   My Software Powers Joomla’s Volunteer Portal ](/blog/development/my-software-powers-joomlas-volunteer-portal) [  Next article: SCORM Shenanigans - PART DEUX  SCORM Shenanigans - PART DEUX  ](/blog/development/scorm-shenanigans-part-deux)  

##### We Value Your Privacy

 

We use cookies to enhance your experience and for traffic analysis. By continuing to visit this site you agree to our use of cookies.

[Privacy Policy](/privacy-policy)

 Details 

###### Google Tag Manager Items

- Ad Storage
- Ad User Data
- Ad Personalization
- Analytics Storage
- Functionality Storage
- Personalization Storage
- Security Storage
 
 

 

 

 

 

 Decline Accept
```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.richeyweb.com/#organization","name":"RicheyWeb","url":"https://www.richeyweb.com/","logo":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/logo/richeyweb.svg","contentUrl":"https://www.richeyweb.com/images/logo/richeyweb.svg","width":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":38,"unitCode":"PX"},"@id":"https://www.richeyweb.com/#logo"},"image":{"@id":"https://www.richeyweb.com/#logo"},"sameAs":["https://x.com/ComRicheyweb","https://www.facebook.com/RicheyWebDev/","https://www.youtube.com/channel/UCxnVG8BwOvQRO7hVqNX7T2g","https://community.joomla.org/service-providers-directory/listings/115:richeyweb.html"],"description":"RicheyWeb is a custom software developer specializing in Joomla extensions.","ContactPoint":[{"@type":"ContactPoint","url":"https://www.richeyweb.com/contact-us","telephone":"903-873-8460","contactType":"Owner/Administrator","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"},{"@type":"ContactPoint","url":"https://www.richeyweb.com/bugs","telephone":"903-873-8460","contactType":"Technical Support","areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"availableLanguage":"en"}],"knowsAbout":["Computer programming",{"@type":"Thing","name":"Computer programming","sameAs":["https://en.wikipedia.org/wiki/Computer_programming","https://www.wikidata.org/wiki/Q80006","https://g.co/kg/m/01mf_"]},"PHP",{"@type":"Thing","name":"PHP","sameAs":["https://en.wikipedia.org/wiki/PHP","https://www.wikidata.org/wiki/Q59","https://g.co/kg/m/060kv"]},"JavaScript",{"@type":"Thing","name":"JavaScript","sameAs":["https://en.wikipedia.org/wiki/JavaScript","https://www.wikidata.org/wiki/Q2005","https://g.co/kg/m/02p97"]},"arduino","Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"White hat",{"@type":"Thing","name":"White hat","sameAs":["https://en.wikipedia.org/wiki/White_hat_(computer_security)","https://www.wikidata.org/wiki/Q7995625","https://g.co/kg/m/03ns_5"]},"Search engine optimization",{"@type":"Thing","name":"Search engine optimization","sameAs":["https://en.wikipedia.org/wiki/Search_engine_optimization","https://www.wikidata.org/wiki/Q180711","https://g.co/kg/m/019qb_"]},"Search engine marketing",{"@type":"Thing","name":"Search engine marketing","sameAs":["https://en.wikipedia.org/wiki/Search_engine_marketing","https://www.wikidata.org/wiki/Q846132","https://g.co/kg/m/06mw8r"]},"Digital marketing",{"@type":"Thing","name":"Digital marketing","sameAs":["https://en.wikipedia.org/wiki/Digital_marketing","https://www.wikidata.org/wiki/Q1323528","https://g.co/kg/g/122hcnps"]},"Web hosting service",{"@type":"Thing","name":"Web hosting service","sameAs":["https://en.wikipedia.org/wiki/Web_hosting_service","https://www.wikidata.org/wiki/Q5892272","https://g.co/kg/m/014pz4"]},"Email hosting service",{"@type":"Thing","name":"Email hosting service","sameAs":["https://en.wikipedia.org/wiki/Email_hosting_service","https://www.wikidata.org/wiki/Q5368818","https://g.co/kg/m/09w60m"]},"Internet hosting service",{"@type":"Thing","name":"Internet hosting service","sameAs":["https://en.wikipedia.org/wiki/Internet_hosting_service","https://www.wikidata.org/wiki/Q1210425","https://g.co/kg/m/09w5yw"]},"Virtual hosting",{"@type":"Thing","name":"Virtual hosting","sameAs":["https://en.wikipedia.org/wiki/Virtual_hosting","https://www.wikidata.org/wiki/Q588365","https://g.co/kg/m/024mvh"]},"Web performance",{"@type":"Thing","name":"Web performance","sameAs":["https://en.wikipedia.org/wiki/Web_performance","https://www.wikidata.org/wiki/Q7978612","https://g.co/kg/m/0gfj3f1"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"General Data Protection Regulation",{"@type":"Thing","name":"General Data Protection Regulation","sameAs":["https://en.wikipedia.org/wiki/General_Data_Protection_Regulation","https://www.wikidata.org/wiki/Q1172506","https://g.co/kg/m/0pk_7xs"]},"SERP",{"@type":"Thing","name":"SERP","sameAs":["https://en.wikipedia.org/wiki/SERP","https://www.wikidata.org/wiki/Q2205811","https://g.co/kg/g/11c5szp7kc"]},"Artificial intelligence",{"@type":"Thing","name":"Artificial intelligence","sameAs":["https://en.wikipedia.org/wiki/Artificial_intelligence","https://www.wikidata.org/wiki/Q11660","https://g.co/kg/m/0mkz"]},"Prompt engineering",{"@type":"Thing","name":"Prompt engineering","sameAs":["https://en.wikipedia.org/wiki/Prompt_engineering","https://www.wikidata.org/wiki/Q108941486","https://g.co/kg/g/11p6kpgt_n"]},"E-learning",{"@type":"Thing","name":"E-learning","sameAs":["https://en.wikipedia.org/wiki/E-learning_(theory)","https://www.wikidata.org/wiki/Q182250","https://g.co/kg/g/122czm1f"]},"Sharable Content Object Reference Model",{"@type":"Thing","name":"Sharable Content Object Reference Model","sameAs":["https://en.wikipedia.org/wiki/Sharable_Content_Object_Reference_Model","https://www.wikidata.org/wiki/Q827811","https://g.co/kg/m/06_40"]},"Experience API",{"@type":"Thing","name":"Experience API","sameAs":["https://en.wikipedia.org/wiki/Experience_API","https://www.wikidata.org/wiki/Q7807728","https://g.co/kg/g/1yw9ktxr8"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]},"Nginx",{"@type":"Thing","name":"Nginx","sameAs":["https://en.wikipedia.org/wiki/Nginx","https://www.wikidata.org/wiki/Q306144","https://g.co/kg/m/02qft91"]},"MySQL",{"@type":"Thing","name":"MySQL","sameAs":["https://en.wikipedia.org/wiki/MySQL","https://www.wikidata.org/wiki/Q850","https://g.co/kg/m/04y3k"]}],"areaServed":["United States",{"@type":"Country","name":"United States","sameAs":["https://en.wikipedia.org/wiki/United_States","https://www.wikidata.org/wiki/Q30","https://g.co/kg/m/09c7w0"]},"European Union",{"@type":"AdministrativeArea","name":"European Union","sameAs":["https://en.wikipedia.org/wiki/European_Union","https://www.wikidata.org/wiki/Q458","https://g.co/kg/m/0_6t_z8"]},"United Kingdom",{"@type":"Country","name":"United Kingdom","sameAs":["https://en.wikipedia.org/wiki/United_Kingdom","https://www.wikidata.org/wiki/Q145","https://g.co/kg/m/07ssc"]},"Australia",{"@type":"Country","name":"Australia","sameAs":["https://en.wikipedia.org/wiki/Australia","https://www.wikidata.org/wiki/Q408","https://g.co/kg/m/0chghy"]},"Canada",{"@type":"Country","name":"Canada","sameAs":["https://en.wikipedia.org/wiki/Canada","https://www.wikidata.org/wiki/Q16","https://g.co/kg/m/0d060g"]},"Russia",{"@type":"Country","name":"Russia","sameAs":["https://en.wikipedia.org/wiki/Russia","https://www.wikidata.org/wiki/Q159","https://g.co/kg/m/06bnz"]},"China",{"@type":"Country","name":"China","sameAs":["https://en.wikipedia.org/wiki/China","https://www.wikidata.org/wiki/Q148","https://g.co/kg/m/0d05w3"]}],"memberOf":["Mensa International",{"@type":"Organization","name":"Mensa International","sameAs":["https://en.wikipedia.org/wiki/Mensa_International","https://www.wikidata.org/wiki/Q184194","https://g.co/kg/m/0140pf"]},"National Rifle Association",{"@type":"Organization","name":"National Rifle Association","sameAs":["https://en.wikipedia.org/wiki/National_Rifle_Association","https://www.wikidata.org/wiki/Q863259","https://g.co/kg/m/0j6f9"]},"CompTIA",{"@type":"Organization","name":"CompTIA","sameAs":["https://en.wikipedia.org/wiki/CompTIA","https://www.wikidata.org/wiki/Q597534","https://g.co/kg/m/040shq"]},"ISFCE LLC",{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://isfce.com","https://g.co/kg/g/11wxm5r0rg"]}],"hasCredential":[{"@type":"EducationalOccupationalCredential","name":"Joomla 3 Certified Administrator","credentialCategory":"Certification","description":"Administrator Exam is the first available Joomla! certification exam","recognizedBy":{"@type":"Organization","name":"Open Source Matters, Inc.","sameAs":["https://en.wikipedia.org/wiki/Open_Source_Matters,_Inc.","https://g.co/kg/g/11f00wvjhz"]},"url":"https://certification.joomla.org/certified-user-directory/michael-richey","about":["Content management system",{"@type":"Thing","name":"Content management system","sameAs":["https://en.wikipedia.org/wiki/Content_management_system","https://www.wikidata.org/wiki/Q131093","https://g.co/kg/m/0k23c"]},"Web content management system",{"@type":"Thing","name":"Web content management system","sameAs":["https://en.wikipedia.org/wiki/Web_content_management_system","https://www.wikidata.org/wiki/Q45211","https://g.co/kg/m/0615s2"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/badge.webp","contentUrl":"https://www.richeyweb.com/images/contact/badge.webp","width":{"@type":"QuantitativeValue","value":300,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":86,"unitCode":"PX"},"caption":"Joomla 3 Certified Administrator"}},{"@type":"EducationalOccupationalCredential","name":"Certified Computer Examiner","credentialCategory":"Certification","description":"Internationally recognized computer forensics certifiecation","recognizedBy":{"@type":"Organization","name":"ISFCE LLC","sameAs":["https://en.wikipedia.org/wiki/ISFCE_LLC","https://g.co/kg/g/11wxm5r0rg"]},"url":"https://isfce.com/","about":["Digital forensics",{"@type":"Thing","name":"Digital forensics","sameAs":["https://en.wikipedia.org/wiki/Digital_forensics","https://www.wikidata.org/wiki/Q3246940","https://g.co/kg/m/0cnxzfx"]},"Computer forensics",{"@type":"Thing","name":"Computer forensics","sameAs":["https://en.wikipedia.org/wiki/Computer_forensics","https://www.wikidata.org/wiki/Q878553","https://g.co/kg/m/02wxbd"]},"Mobile device forensics",{"@type":"Thing","name":"Mobile device forensics","sameAs":["https://en.wikipedia.org/wiki/Mobile_device_forensics","https://www.wikidata.org/wiki/Q6887097","https://g.co/kg/m/06zp3tp"]},"Network forensics",{"@type":"Thing","name":"Network forensics","sameAs":["https://en.wikipedia.org/wiki/Network_forensics","https://www.wikidata.org/wiki/Q7001032","https://g.co/kg/m/05pb280"]},"Database forensics",{"@type":"Thing","name":"Database forensics","sameAs":["https://en.wikipedia.org/wiki/Database_forensics","https://www.wikidata.org/wiki/Q5227405","https://g.co/kg/m/0cgqsy"]}],"educationalLevel":"expert","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/contact/isfce-cce.webp","contentUrl":"https://www.richeyweb.com/images/contact/isfce-cce.webp","width":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":150,"unitCode":"PX"},"caption":"Certified Computer Examiner"}}],"hasOfferCatalog":{"@type":"OfferCatalog","name":"Web Services","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Hosting"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Development"}},{"@type":"Offer","itemOffered":{"@type":"Service","name":"Search Engine Optimization"}}]}},{"@type":"WebSite","@id":"https://www.richeyweb.com/#website","url":"https://www.richeyweb.com/","name":"RicheyWeb","publisher":{"@id":"https://www.richeyweb.com/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.richeyweb.com/search?q={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string","valueMaxLength":256,"valueMinLength":2,"valuePattern":"^[A-Za-z0-9\\s]+$"}},"creator":{"@id":"https://www.richeyweb.com/#organization"},"copyrightHolder":{"@id":"https://www.richeyweb.com/#organization"}},{"@type":"WebPage","@id":"https://www.richeyweb.com/blog/development/did-i-just-solve-joomla-bot-spam-with-hashcash#webpage","url":"https://www.richeyweb.com/blog/development/did-i-just-solve-joomla-bot-spam-with-hashcash","name":"Did I Just Solve Joomla Bot Spam With HashCash?","description":"How I evolved Captcha - HashCash for Joomla over 11 years to silently block bot spam. No spam lately—did I crack it? The journey from spam to silence.","isPartOf":{"@id":"https://www.richeyweb.com/#website"},"about":{"@id":"https://www.richeyweb.com/#organization"},"inLanguage":"en-GB"},{"@type":"Article","image":{"@type":"ImageObject","url":"https://www.richeyweb.com/images/articles/plg_captcha_hashcash/blog-post/hashcash-blog-post.webp","contentUrl":"https://www.richeyweb.com/images/articles/plg_captcha_hashcash/blog-post/hashcash-blog-post.webp","width":{"@type":"QuantitativeValue","value":668,"unitCode":"PX"},"height":{"@type":"QuantitativeValue","value":374,"unitCode":"PX"},"caption":"Did I Just Solve Joomla Bot Spam With HashCash?","representativeOfPage":true},"headline":"Did I Just Solve Joomla Bot Spam With HashCash?","description":"How I evolved Captcha - HashCash for Joomla over 11 years to silently block bot spam. No spam lately—did I crack it? The journey from spam to silence.","author":{"@type":"Person","name":"Michael Richey","url":"https://www.richeyweb.com/contact-us","@id":"https://www.richeyweb.com/contact-us#person"},"datePublished":"2025-03-09T00:00:00+00:00","dateModified":"2026-03-30T00:00:00+00:00","about":["Captcha - HashCash",{"@type":"Thing","@id":"https://www.richeyweb.com/software/joomla/plugins/captcha-hashcash/#softwareapplication","name":"Captcha - HashCash","sameAs":["https://extensions.joomla.org/extension/access-a-security/site-security/hashcash/","https://en.wikipedia.org/wiki/Captcha_-_HashCash"]},"Hashcash",{"@type":"Thing","name":"Hashcash","sameAs":["https://en.wikipedia.org/wiki/Hashcash","https://www.wikidata.org/wiki/Q357569","https://g.co/kg/m/02qsnf"]},"Internet bot",{"@type":"Thing","name":"Internet bot","sameAs":["https://en.wikipedia.org/wiki/Internet_bot","https://www.wikidata.org/wiki/Q191865","https://g.co/kg/m/05c5js"]},"Spam Bot",{"@type":"Thing","name":"Spam Bot","sameAs":["https://en.wikipedia.org/wiki/Spam_Bot","https://g.co/kg/g/1s05qgwj_"]},"Joomla",{"@type":"Thing","name":"Joomla","sameAs":["https://en.wikipedia.org/wiki/Joomla","https://www.wikidata.org/wiki/Q13167","https://g.co/kg/m/07qb81"]}],"mentions":["Adam Back",{"@type":"Person","name":"Adam Back","sameAs":["https://en.wikipedia.org/wiki/Adam_Back","https://www.wikidata.org/wiki/Q348671","https://g.co/kg/m/02q93bn"]},"Proof of work",{"@type":"Thing","name":"Proof of work","sameAs":["https://en.wikipedia.org/wiki/Proof_of_work","https://www.wikidata.org/wiki/Q7249984","https://g.co/kg/m/05bdrw"]},"reCAPTCHA",{"@type":"Thing","name":"reCAPTCHA","sameAs":["https://en.wikipedia.org/wiki/ReCAPTCHA","https://www.wikidata.org/wiki/Q188054","https://g.co/kg/m/02rd5k5"]},"Google Analytics",{"@type":"Thing","name":"Google Analytics","sameAs":["https://en.wikipedia.org/wiki/Google_Analytics","https://www.wikidata.org/wiki/Q220577","https://g.co/kg/m/08w9_f"]},"JavaScript",{"@type":"Thing","name":"JavaScript","sameAs":["https://en.wikipedia.org/wiki/JavaScript","https://www.wikidata.org/wiki/Q2005","https://g.co/kg/m/02p97"]},"Common Vulnerabilities and Exposures",{"@type":"Thing","name":"Common Vulnerabilities and Exposures","sameAs":["https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures","https://www.wikidata.org/wiki/Q94950995","https://g.co/kg/m/0bc3yx"]},"Web Cryptography API",{"@type":"Thing","name":"Web Cryptography API","sameAs":["https://en.wikipedia.org/wiki/Web_Cryptography_API","https://www.wikidata.org/wiki/Q30688210","https://g.co/kg/g/11dy_ksq2m"]},"Plug-in",{"@type":"Thing","name":"Plug-in","sameAs":["https://en.wikipedia.org/wiki/Plug-in_(computing)","https://www.wikidata.org/wiki/Q3906765","https://g.co/kg/m/05x35"]}],"@id":"https://www.richeyweb.com/blog/development/did-i-just-solve-joomla-bot-spam-with-hashcash#article","isPartOf":{"@id":"https://www.richeyweb.com/blog/development/did-i-just-solve-joomla-bot-spam-with-hashcash#webpage"},"publisher":{"@id":"https://www.richeyweb.com/#organization"},"keywords":"HashCash, spam, bot spam, Joomla, plugin, CVE, bot detection, punish bots, unsolvable calculation, CPU cycles, spam prevention, form abuse, bot activity, analytics, IP address, user agent, custom event, Google Analytics, silent shield, lightweight, Javascript, Web Cryptography API, delayed calculations, difficulty levels, contact page, spam email, bot traffic, form submission, bot checks, silver bullet, form abuse, script, headless browser, automation, dark web, partial success, effective, win, spam dry up, contact us, difficulty, punishment mode, spam prevention for Joomla, bot tears, spamming, spam protection","articleSection":"Development","url":"https://www.richeyweb.com/blog/development/did-i-just-solve-joomla-bot-spam-with-hashcash"}]}
```
