I'm about to implement a web form that requires some form of spam prevention. I'd like to avoid spam prevention techniques involving user input, and integrating with Akismet is overkill for this situation (it's ok if a small amount of spam does get through). I'd also prefer to avoid techniques involving javascript - again the user experience is the top priority and I don't want to discount users on devices without javascript.
A common technique is a honeypot form field which is hidden with CSS so that it is invisible to the end user but seen by spambots. Ideally this should have an enticing name like "name" or "email_address". However I'm concerned that these may be filled out by browser (or other 3rd party) form auto-complete tools, hence identifying legitimate submissions as spam.
This got me thinking about form elements that auto-complete tools will ignore, but spambots will attempt to use. A checkbox input was the first thing to come to mind - many forms include a checkbox along the lines of "Please accept our terms & conditions". Surely spambots would attempt to mark this as checked? So, perhaps a hidden checkbox would be an acceptable solution:
<div class="hidden">
<label>
Are you not a human?
<input type="checkbox" name="accept_terms" value="1" />
</label>
</div>
Users without CSS will see the field, which isn't so great, but that's going to be a very small proportion of users, and the label should explain that they should not tick the box.
My main concern though is that I'm not sure how most spambots interact with checkboxes. Will this technique work?
Please note: this isn't to trigger a discussion on various spam prevention techniques - just to get feedback on this technique in particular.
Thanks!
Edit: <div class="hidden">
could just as easily be <div class="abc">
, provided .abc { display: none; }