I settled on implementing a honeypot technique using invisible_captcha gem [1]. It uses multiple techniques to detect bot activity, such as checking if the form was submitted too fast, hidden form attribute only visible by bots but not humans, etc...
Luckily for me, these bots weren't quite sophisticated so I managed to clamp down on their activity. I still get a couple of bogus signup attempts every day.
Disclosure: I am a contributor to the invisible_captcha gem
[0] https://tryhexadecimal.com
[1] https://github.com/markets/invisible_captcha
EDIT: grammar and wording
I'd love to see a solution that's privacy-friendly.
Every single time I have to pass few batches of captchas. I'm not on a private window and I'm logged in to Google. So I started to blacklist websites that use Google captcha. and forced myself to change reading habits.
How do you do this in a world with decent spam filters? By using the victim's email to sign up for real services so they get hit with a welcome email. Because these are real services, spam filter won't catch it. This can only be done with services that have sign up forms that are easily automated.
The most evil thing here is your email is crippled even after the attack is over because these real companies will keep sending you newsletter and it's impossible to unsubscribe to them all.
In the end I wrote my own rule based spam filters and that has been significantly more effective without tracking or annoying users.
I don't necessarily mind contributing to googles car-driving AI, but the services that I've put this captcha infront of have seen a dramatic increase in spam.
I unfortunately don't know what the solution to this problem is but I would gladly contribute to whatever someone smarter than me comes up with!
> The difficulty of captchas can be so out of balance, that sometimes they seem friendlier to bots than they are to humans. The goal of this project is to improve our experience with captchas, by giving us easy access to solutions already utilized by automated systems.
A sophisticated attacker will simply use something like Mechanical Turk to get past Google captcha, and Google captcha is incredibly aggravating to a number of marginal users. But it's simple to implement, so that makes it popular.
I'd even say that most services don't need captcha in the first place. Captcha only affects relatively unsophisticated attacks, and if it's just an entry in your database, who cares? If it's sending you spam in an attempt to DDOS your email or customer service platform, use correlation between purchases and accounts to filter out the spam.
So, as with all security related matters, identify your threat model, and use that to figure out what you actually need, not what you think you need.
There's dozens of simplistic captcha libraries that serve obscured text. I can would rather transcribe a few letters much than complete a Google Captcha, probably faster, too.
(E.g. maybe it's reasonable to have a captcha of some sort for account creation, with fallback to a human-involved process. But if you're trying to prevent credential-stuffing on a login form, the correct approach is using the Pwned Passwords dataset and/or cooloffs.)
You can try out demos at https://www.nettoolkit.com/shibboleth/demo
While not open-source, the service is very affordable ($10 for 100,000 CAPTCHAs), and clients get to review user submissions to see if the CAPTCHAs are reasonable or not.
Would love to get your feedback on the service.
I get 60 free minutes/month from Google Speech to text API. So, It's pretty much free to use.
[1]: https://addons.mozilla.org/en-US/firefox/addon/buster-captch...
Though I suppose if this becomes common, bots might just google that question and try some of the zero-click results as answers.
No need to select 25 traffic lights. Gives you a score from 0 to 1 so you can decide whether you let them in easily or not.
Don't?
I mean, what are you trying to protect? If it's account registrations, shouldn't an email confirmation be enough?