Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Preventing bots from doing form submissions

Tags:

security

At my site, I present a form for visitor input. No login is required. I cannot require a login. So anyone browsing the site can submit the form. It also opens up the form to bots. I need to prevent the bots. I had asked the question on the following thread.

Unwanted garbage input from bots?

I did get some useful response. I read a few solutions to the this (captcha and non-captcha).

Mine is not a site where a I get significant traffic. My users are not terribly computer savvy. So I was thinking of doing something like this. I am not a very accomplished programmer and what I am saying here may be very stupid. But I am simply trying to learn, so please bear with me.

Every time I present the form, I generate a unique key (unix time + remote host IP). I store the key in a db table and I send out the form with the key being a hidden field on the form. When a form is submitted, I check to see if the value for the key is in the db table. If it is, I remove the key from the db table and I process the form. If the key is not in the db table, I discard the form and ask the user to do the operation again.

With every submission I also remove stale entries(where the users did not submit the form within a stipulated time). I will need to have some mechanism where I prevent the request for the form, from bots. Say for example, if I have n number of pending requests from a particular host, I ask people to request for the form after a few moments.

Will something like this work?

like image 796
rpat Avatar asked Mar 10 '11 04:03

rpat


People also ask

Why do bots fill out forms?

At other times, these bots are made to create fake leads on the behalf of the fraudster using them. Why would someone use form-filling bots on your ad campaigns? The primary reason is usually money. By generating a ton of bad or fake leads, a fraudster can claim credit and collect a big paycheck for minimal effort.


4 Answers

the bots will be able to request the hidden field and submit it anyway. try a non-re-captcha library so that your users don't get overwhelmed (recaptcha is overwhelming due to its extra goal of hijacking your users to do OCR of pretty illegible text).

however, since you ask for a non-captcha solution, i would propose that you measure the time between form request and form submission (with the hidden key). a bot would submit the form within a couple of seconds of request, but a human would not.

if you find that this simple approach does not work for your site then you can try something more complex.

like image 183
necromancer Avatar answered Oct 15 '22 13:10

necromancer


You could also hide the form and then a user would have to click on a button to reveal it. Much like how twitter does it when you log in.

like image 37
Jason Avatar answered Oct 15 '22 13:10

Jason


I wouldn't worry too much about bots submitting your form. It's not gonna happen. If you're terribly fearful then instead of a captcha ask a stupid question like "what is 1+1?" before a submission.

like image 1
Shai UI Avatar answered Oct 15 '22 13:10

Shai UI


It all depends on how desperately the spammers want to submit junk to your form. Your method will work for the most stupid of bots, but as agks mehx pointed out it's trivial for a bot to load up the form and extract the field if someone bothers to take a minute or so to tweak their bot.

At the other end of the spectrum, there's little you can do to automatically stop the "pay people in certain countries the equivalent of 10¢/hr to spam every board they can find" tactic without locking things down to an extent that also prevents the general public from posting useful comments.

like image 1
Anomie Avatar answered Oct 15 '22 12:10

Anomie