I have a Rails application that has a search field that allows any visitor to search a database.
I’m hesitant to implement a Captcha because I’d like to keep the site clean and user-friendly.
However, I’d like to make it difficult for bots to try to harvest everything from the database by making tons of consecutive random queries. So I’m considering adding a Captcha that appears only if it looks like this is happening (e.g., the Captcha appears after a few bad searches).
Any suggestions for how to implement this? Should I try to use a session variable or keep track of IP addresses? Would I better off handling this issue at the server level (i.e., with an htaccess file)?
Consider using a honeypot. That means adding a form element that you hide with CSS. Bots cannot see that you’ve hidden the field and they will fill it in. Normal users will not fill it in.