Stopping Spam

Posted by Matt on Fri, May 19 2006

This site will be a user driven site, so I want to make the barrier for users to contribute very low. That means no accounts, no e-mail verification or any of that stuff. Like a blog comment they should just be able to post. This presents the obvious problem of spam posts. I figure if someone wants to go to the Yankees page and post "Yankees SUXXX!!!! GO SOXXXX!!!" I can't really do much to stop them. I could force all new posts to be approved before they go live, but that would require constant maintance. I really just want to stop automated bots that find forms and just submit lame V1@gr@ links.
The alternative is one of, or a combination of these:

1. CAPTCHA - I hate CAPTCHAs. Not only are they hard for the visually impaired to read, they're hard for me to read and I have decent vision. I did implent a CAPTCHA in the development site to see how it works, but I don't like it.

2. Hidden Field Trick - I read about this in a blog comment somewhere. Basically you make a form field and give it some enticing name like "email" or "comment". Then you hide the field in a div so a normal user won't see it. An automated bot will not know this and put spam data in the field before submitting it. Now this is easily worked around if someone was paying attention. Wordpress or ESPN's Sports Travel site couldn't get away with this, but my site will be small (to start) and therefor won't be specifically targeted.

3. Integrate a automated spam package, such as Bad Behavior. I like this solution. It automated, well supported and seems pretty easy to implement. Bad Behavior mostly uses header info to pick out the spam. There are other packages that compare the post to a database of spam and tags it that way, but I don't want to depend on checking an outside source for every post.

So the final solution will probably be a combination of #2 and #3. I'll probably just do #2 to start, since will probably go together pretty fast and I'll do #3 pending time.

1 Comment

Michael Hampton said on May 20, 2006
I think you've got them backwards. You should do #3, and skip #2 entirely. :)