The Marilyn Manson wiki I’ve been running for a couple of years now recently suffered from massive attacks of spam. We’ve had those before, but previously we’ve always been able to stop those with plugins like ConfirmEdit. This time however, both ConfirmEdit and SimpleAntiSpam were no match for the spammers.
It was time to come up with something new, and I don’t mean making the CAPTCHA extremely hard. Because to be honest, Captcha’s Suck.
A while ago I stumbled across a website called KittenAuth, a CAPTCHA-like plugin that asks visitors to select three kittens from an array of 9 images. I immediately liked the concept, and I’m actually surprised I haven’t seen it used that much yet.
One thing I didn’t like though was the size of the block of images. The website itself doesn’t have any screenshots (strange), but you can see plenty of examples at Google images. Also, as easy as it is for us humans to identify a cat, I think the 3×3 grid makes it pretty tough to identify all the kittens at a glance. And then we’re back at why CAPTCHA’s suck: it takes several seconds to figure out the correct answer.
Anyway, my idea was to develop a KittenAuth plugin for MediaWiki that is strong enough to stop the spam flood, but easy enough for humans not to take several seconds to solve. And so I did:
What I also did was add the option to upload custom images. Kittens are cute and all, but sometimes it’s much more fun to have your users pick something that is related to the site they’re on. Like in my case, Marilyn Manson.
Apart from being able to customize the images there’s also a range of options for which visitors actually see the KittenAuth, when it is triggered, and what IP’s and URL’s are disregarded. These are mostly taken from ConfirmEdit, so due credit goes to it’s developers.
Feel free to leave a comment on the plugin’s talk page, here on this blog or on Twitter (@Litso_) if you have any questions or remarks. If you’re a PHP developer and you think you can improve the plugin or help out with the To-Do items, feel free to edit the code and send me an update!