<p>It looks like we'll be adding <a href="http://en.wikipedia.org/wiki/Captcha" rel="noreferrer">CAPTCHA</a> support to Stack Overflow. This is necessary to prevent bots, spammers, and other malicious scripted activity. We only want human beings to post or edit things here!</p>

<p>We'll be using a JavaScript (jQuery) CAPTCHA as a first line of defense:</p>

<p><a href="http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs" rel="noreferrer">http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs</a></p>

<p>The advantage of this approach is that, <strong>for most people, the CAPTCHA won't ever be visible!</strong></p>

<p>However, for people with JavaScript disabled, we still need a fallback and this is where it gets tricky.</p>

<p>I have written a <a href="http://www.codeproject.com/KB/custom-controls/CaptchaControl.aspx" rel="noreferrer">traditional CAPTCHA control for ASP.NET</a> which we can re-use.</p>

<p><img src="https://i.stack.imgur.com/Puvbf.jpg" alt="CaptchaImage"></p>

<p>However, I'd prefer to go with something textual to avoid the overhead of creating all these images on the server with each request.</p>

<p>I've seen things like..</p>

<ul>
<li>ASCII text captcha: <code>\/\/(_)\/\/</code></li>
<li>math puzzles: what is 7 minus 3 times 2?</li>
<li>trivia questions: what tastes better, a toad or a popsicle?</li>
</ul>

<p>Maybe I'm just tilting at windmills here, but I'd like to have a less resource intensive, non-image based <code>&lt;noscript&gt;</code> compatible CAPTCHA if possible.</p>

<p>Ideas?</p>

[{'answer_id': 8474, 'author': 'Jeff Atwood', 'author_id': 1, 'author_profile': 'https://Stackoverflow.com/users/1', 'pm_score': 2, 'selected': False, 'text': '<p>Someone also suggest the Raphael JavaScript library, which apparently let you draw on the client in all popular browsers:</p>\n\n<p><a href="http://dmitry.baranovskiy.com/raphael/" rel="nofollow noreferrer">http://dmitry.baranovskiy.com/raphael/</a></p>\n\n<p>.. but that wouldn\'t exactly work with my <code>&lt;noscript&gt;</code> case, now would it ? :)</p>\n'}, {'answer_id': 8478, 'author': 'nlucaroni', 'author_id': 157, 'author_profile': 'https://Stackoverflow.com/users/157', 'pm_score': 5, 'selected': False, 'text': '<p>Be sure it isn\'t something <a href="http://www.google.com/search?q=what+is+7+minus+3+times+2%3F" rel="nofollow noreferrer">Google can answer</a> though. Which also shows an issue with that --order of operations!</p>\n'}, {'answer_id': 8481, 'author': 'Jarod Elliott', 'author_id': 1061, 'author_profile': 'https://Stackoverflow.com/users/1061', 'pm_score': 4, 'selected': False, 'text': '<p>Although we all <strong>should</strong> know basic maths, the math puzzle could cause some confusion. In your example I\'m sure some people would answer with "8" instead of "1".</p>\n\n<p>Would a simple string of text with random characters highlighted in bold or italics be suitable? The user just needs to enter the bold/italic letters as the CAPTCHA.</p>\n\n<p>E.g. <strong>s</strong>sdfa<strong>t</strong>werwe<strong>a</strong>jh<strong>c</strong>sad<strong>k</strong>oghvefdhrffghlfgdhowfgh</p>\n\n<p>In this case "stack" would be the CAPTCHA.\nThere are obviously numerous variations on this idea.</p>\n\n<p>Edit: Example variations to address some of the potential problems identified with this idea:</p>\n\n<ul>\n<li>using randomly coloured letters instead of bold/italic.</li>\n<li>using every second red letter for the CAPTCHA (reduces the possibility of bots identifying differently formatted letters to guess the CAPTCHA)</li>\n</ul>\n'}, {'answer_id': 8484, 'author': 'Rob Cooper', 'author_id': 832, 'author_profile': 'https://Stackoverflow.com/users/832', 'pm_score': 5, 'selected': False, 'text': '<blockquote>\n  <p>The advantage of this approach is that, for most people, <strong>the CAPTCHA won\'t ever be visible!</strong></p>\n</blockquote>\n\n<p>I like this idea, is there not any way we can just hook into the rep system? I mean, anyone with say +100 rep is likely to be a human. So if they have rep, you need not even bother doing ANYTHING in terms of CAPTCHA.</p>\n\n<p>Then, if they are not, then send it, I\'m sure it wont take that many posts to get to 100 and the community will instantly dive on anyone seem to be spamming with offensive tags, why not add a "report spam" link that downmods by 200? Get 3 of those, spambot achievement unlocked, bye bye ;)</p>\n\n<p><strong>EDIT</strong>: I should also add, I like the math idea for the non-image CAPTCHA. Or perhaps a <em>simple</em> riddle-type-thing. May make posting even more interesting ^_^</p>\n'}, {'answer_id': 8489, 'author': 'lomaxx', 'author_id': 493, 'author_profile': 'https://Stackoverflow.com/users/493', 'pm_score': 5, 'selected': False, 'text': '<p>What about a <a href="http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx" rel="noreferrer">honeypot captcha</a>?</p>\n'}, {'answer_id': 8514, 'author': 'Jarod Elliott', 'author_id': 1061, 'author_profile': 'https://Stackoverflow.com/users/1061', 'pm_score': 1, 'selected': False, 'text': "<p>@pc1oad1etter I also noticed that after doing my post. However, it's just an idea and not the actual implementation. Varying the font or using different colours instead of bold/italics would easily address usability issues.</p>\n"}, {'answer_id': 8543, 'author': 'Lance Fisher', 'author_id': 571, 'author_profile': 'https://Stackoverflow.com/users/571', 'pm_score': 2, 'selected': False, 'text': '<p>Who says you have to <em>create</em> all the images on the server with each request?  Maybe you could have a static list of images or pull them from flickr.  I like the "click on the kitten" captcha idea.  <a href="http://www.thepcspy.com/kittenauth" rel="nofollow noreferrer">http://www.thepcspy.com/kittenauth</a></p>\n'}, {'answer_id': 8548, 'author': 'Derek Park', 'author_id': 872, 'author_profile': 'https://Stackoverflow.com/users/872', 'pm_score': 1, 'selected': False, 'text': '<p>@lance</p>\n\n<blockquote>\n  <p>Who says you have to create all the images on the server with each request? Maybe you could have a static list of images or pull them from Flickr. I like the "click on the kitten" CAPTCHA idea. <a href="http://www.thepcspy.com/kittenauth" rel="nofollow noreferrer">http://www.thepcspy.com/kittenauth</a>.</p>\n</blockquote>\n\n<p>If you pull from a static list of images, it becomes trivial to circumvent the CAPTCHA, because a human can classify them and then the bot would be able to answer the challenges easily.  Even if a bot can\'t answer all of them, it can still spam.  It only needs to be able to answer a small percent of CAPTCHAs, because it can always just retry when an attempt fails.</p>\n\n<p>This is actually a problem with puzzles and such, too, because it\'s extremely difficult to have a large set of challenges.</p>\n'}, {'answer_id': 8554, 'author': 'Derek Park', 'author_id': 872, 'author_profile': 'https://Stackoverflow.com/users/872', 'pm_score': 1, 'selected': False, 'text': "<p>@rob</p>\n\n<blockquote>\n  <blockquote>\n    <p>What about a honeypot captcha?\n    Wow, so simple! Looks good! Although they have highlighted the accessibility issue.. Do you think that this would be a problem at SO? I personally find it hard to imagine developers/programmers that have difficulty reading the screen to the point where they need a screen reader?</p>\n  </blockquote>\n</blockquote>\n\n<p>There are developers who are not just legally blind, but 100% blind.  Walking cane and helper dog.  I hope the site will support them in a reasonable fashion.</p>\n\n<p>However, with the honeypot captcha, you can put a hidden div as well that tells them to leave the field blank.  And you can also put it in the error message if they do fill it in, so I'm not sure how much of an issue accessibility really is here.  It's definitely not great, but it could be worse.</p>\n"}, {'answer_id': 8556, 'author': 'Tyronomo', 'author_id': 713, 'author_profile': 'https://Stackoverflow.com/users/713', 'pm_score': 2, 'selected': False, 'text': "<p>I had a load of spam issues on a phpBB 2.0 site I was running a while back (the site is now upgraded).<br><br>\nI installed a custom captcha mod I found on the pbpBB forums that worked well for a period of time. I found the real solution was combining this with additional 'required' fields [on the account creation page].  <br>I added; <em>Location</em> and <em>Occupation</em>  (mundane, yet handy to know). <br> The bot never tried to fill these in, still assuming the captcha was the point of fail for each attempt.</p>\n"}, {'answer_id': 8565, 'author': 'Christian Lescuyer', 'author_id': 341, 'author_profile': 'https://Stackoverflow.com/users/341', 'pm_score': 1, 'selected': False, 'text': '<p>Answering the original question:</p>\n\n<ul>\n<li>ASCII is bad : I had to squint to find "WOW". Is this even correct? It could be "VVOVV" or whatever;</li>\n<li>Very simple arithmetic is good. Blind people will be able to answer. (But as Jarod said, beware of operator precedence.) I gather someone could write a parser, but it makes the spamming more costly.</li>\n<li>Trivia is OK, but you\'ll have to write each of them :-(</li>\n</ul>\n\n<p>I\'ve seen pictures of animals [what is it?]. Votes for comics use a picture of a character with their name written somewhere in the image [type in name]. Impossible to parse, not ok for blind people. </p>\n\n<p>You could have an audio fallback reading alphanumerics (the same letters and numbers you have in the captcha).</p>\n\n<p>Final line of defense: make spam easy to report (one click) and  easy to delete (one recap screen to check it\'s a spam account, with the last ten messages displayed, one click to delete account). This is still time-expensive, though.</p>\n'}, {'answer_id': 8637, 'author': 'GateKiller', 'author_id': 383, 'author_profile': 'https://Stackoverflow.com/users/383', 'pm_score': 9, 'selected': True, 'text': '<p><a href="http://gatekiller.co.uk/Post/JavaScript_Captcha" rel="noreferrer">A method that I have developed</a> and which seems to work perfectly (although I probably don\'t get as much comment spam as you), is to have a hidden field and fill it with a bogus value e.g.:</p>\n\n<pre class="lang-html prettyprint-override"><code>&lt;input type="hidden" name="antispam" value="lalalala" /&gt;\n</code></pre>\n\n<p>I then have a piece of JavaScript which updates the value every second with the number of seconds the page has been loaded for:</p>\n\n<pre class="lang-js prettyprint-override"><code>var antiSpam = function() {\n        if (document.getElementById("antiSpam")) {\n                a = document.getElementById("antiSpam");\n                if (isNaN(a.value) == true) {\n                        a.value = 0;\n                } else {\n                        a.value = parseInt(a.value) + 1;\n                }\n        }\n        setTimeout("antiSpam()", 1000);\n}\n\nantiSpam();\n</code></pre>\n\n<p>Then when the form is submitted, If the antispam value is still "lalalala", then I mark it as spam. If the antispam value is an integer, I check to see if it is above something like 10 (seconds). If it\'s below 10, I mark it as spam, if it\'s 10 or more, I let it through.</p>\n\n<pre class="lang-asp prettyprint-override"><code>If AntiSpam = A Integer\n    If AntiSpam &gt;= 10\n        Comment = Approved\n    Else\n        Comment = Spam\nElse\n    Comment = Spam\n</code></pre>\n\n<p>The theory being that:</p>\n\n<ul>\n<li>A spam bot will not support JavaScript and will submit what it sees</li>\n<li>If the bot does support JavaScript it will submit the form instantly</li>\n<li>The commenter has at least read some of the page before posting</li>\n</ul>\n\n<p>The downside to this method is that it requires JavaScript, and if you don\'t have JavaScript enabled, your comment will be marked as spam, however, I do review comments marked as spam, so this is not a problem.</p>\n\n<p><strong>Response to comments</strong></p>\n\n<p>@MrAnalogy: The server side approach sounds quite a good idea and is exactly the same as doing it in JavaScript. Good Call.</p>\n\n<p>@AviD: I\'m aware that this method is prone to direct attacks as I\'ve mentioned on <a href="http://gatekiller.co.uk/Post/JavaScript_Captcha" rel="noreferrer">my blog</a>. However, it will defend against your average spam bot which blindly submits rubbish to any form it can find.</p>\n'}, {'answer_id': 10104, 'author': 'KP.', 'author_id': 439, 'author_profile': 'https://Stackoverflow.com/users/439', 'pm_score': 4, 'selected': False, 'text': '<p>Although this <a href="https://stackoverflow.com/questions/3027/is-there-an-unobtrusive-captcha-for-web-forms">similar discussion</a> was started:</p>\n\n<p>We are trying this solution on one of our frequently data mined applications:</p>\n\n<p><a href="http://www.eggheadcafe.com/tutorials/aspnet/79e023b6-124f-4f63-865c-6d357cddbe56/a-better-captcha-control.aspx" rel="nofollow noreferrer">A Better CAPTCHA Control (Look Ma - NO IMAGE!)\n</a></p>\n\n<p>You can see it in action on our <a href="https://buildinginspections.coj.net/bid_secure/default.aspx" rel="nofollow noreferrer">Building Inspections Search</a>.</p>\n\n<p>You can view Source and see that the CAPTCHA is just HTML.</p>\n'}, {'answer_id': 10995, 'author': 'Thomi', 'author_id': 1304, 'author_profile': 'https://Stackoverflow.com/users/1304', 'pm_score': 1, 'selected': False, 'text': "<p>How about showing nine random geometric shapes, and asking the user to select the two squares, or two circles or something.. should be pretty easy to write, and easy to use as well..</p>\n\n<p>There's nothing worse than having text you cannot read properly...</p>\n"}, {'answer_id': 12469, 'author': 'Jon Galloway', 'author_id': 5, 'author_profile': 'https://Stackoverflow.com/users/5', 'pm_score': 1, 'selected': False, 'text': '<p>Have you looked at <a href="http://waegis.com/" rel="nofollow noreferrer">Waegis</a>?</p>\n\n<p>"Waegis is an online web service that exposes an open API (Application Programming Interface). It gets incoming data through its API methods and applies a quick check and identifies spam and legitimate content on time. It then returns a result to client to specify if the content is spam or not."</p>\n'}, {'answer_id': 12490, 'author': 'Michael Pryor', 'author_id': 245, 'author_profile': 'https://Stackoverflow.com/users/245', 'pm_score': 2, 'selected': False, 'text': "<p>Without an actual CAPTCHA as your <em>first</em> line of defense, aren't you still vulnerable to spammers scripting the browser (trivial using VB and IE)?  I.e. load the page, navigate the DOM, click  the submit button, repeat...</p>\n"}, {'answer_id': 12527, 'author': 'andrewrk', 'author_id': 432, 'author_profile': 'https://Stackoverflow.com/users/432', 'pm_score': 5, 'selected': False, 'text': '<blockquote>\n  <p>So, CAPTCHA is mandatory for all users\n  except moderators. <a href="https://stackoverflow.com/questions/8472?sort=oldest#8487">[1]</a></p>\n</blockquote>\n\n<p>That\'s incredibly stupid. So there will be users who can <strong><em>edit any post on the site</em></strong> but not post without CAPTCHA? If you have enough rep to downvote posts, you have enough rep to post without CAPTCHA. Make it higher if you have to. Plus there are plenty of spam detection methods you can employ without image recognition, so that it even for unregistered users it would never be necessary to fill out those god-forsaken CAPTCHA forms.</p>\n'}, {'answer_id': 12610, 'author': 'Akira', 'author_id': 795, 'author_profile': 'https://Stackoverflow.com/users/795', 'pm_score': 1, 'selected': False, 'text': '<p>I think they are working on throttling.  It would make more sense just to disable CAPTCHA for users with 500+ rep and reset the rep for attackers.</p>\n'}, {'answer_id': 12695, 'author': 'HS.', 'author_id': 1398, 'author_profile': 'https://Stackoverflow.com/users/1398', 'pm_score': 1, 'selected': False, 'text': "<p>I recently (can't remember where) saw a system that showed a bunch of pictures. Each of the pictures had a character assigned to it. The user was then asked to type in the characters for some pictures that showed examples of some category (cars, computers, buildings, flowers and so on). The pictures and characters changed each time as well as the categories to build the CAPTCHA string.</p>\n\n<p>The only problem is the higher bandwidth associated with this approach and you need a lot of pictures that are classified in categories. There is no need to waste much resources generating the pictures.</p>\n"}, {'answer_id': 12726, 'author': 'Patrick Johnmeyer', 'author_id': 363, 'author_profile': 'https://Stackoverflow.com/users/363', 'pm_score': -1, 'selected': False, 'text': '<p>One option would be out-of-band communication; the server could send the user an instant message (or SMS message?) that he/she then has to type into the captcha field.</p>\n\n<p>This imparts an "either/or" requirement on the user -- either you must enable JavaScript OR you must be logged on to your IM service of choice.  While it maybe isn\'t as flexible as some of the other solutions above, it would work for the vast majority of users.</p>\n\n<p>Those with edit privileges, feel free to add to the Pros/Cons rather than submitting a separate reply.</p>\n\n<p>Pros:  </p>\n\n<ul>\n<li>Accessible:  Many IM clients support reading of incoming messages.  Some web-based clients will work with screen readers.</li>\n</ul>\n\n<p>Cons:</p>\n\n<ul>\n<li>Javascript-disabled users are now dependent on up-time of yet another service, on top of OpenID.</li>\n<li>Bots will cause additional server resource usage (sending the out-of-band communications) unless additional protections are implemented</li>\n</ul>\n'}, {'answer_id': 16757, 'author': 'dsims', 'author_id': 744, 'author_profile': 'https://Stackoverflow.com/users/744', 'pm_score': 2, 'selected': False, 'text': "<p>My solution was to put the form on a separate page and pass a timestamp to it.  On that page I only display the form if the timestamp is valid (not too fast, not too old).  I found that bots would always hit the submission page directly and only humans would navigate there correctly.</p>\n\n<p>Won't work if you have the form on the content page itself like you do now, but you could show/hide the link to the special submission page based on NoScript.  A minor inconvienience for such a small percentage of users.</p>\n"}, {'answer_id': 19585, 'author': 'thing2k', 'author_id': 3180, 'author_profile': 'https://Stackoverflow.com/users/3180', 'pm_score': 6, 'selected': False, 'text': '<p>Unless I\'m missing something, what\'s wrong with using <a href="http://recaptcha.net/whyrecaptcha.html" rel="noreferrer">reCAPTCHA</a> as all the work is done externally.</p>\n\n<p>Just a thought.</p>\n'}, {'answer_id': 19705, 'author': 'Chris Bartow', 'author_id': 497, 'author_profile': 'https://Stackoverflow.com/users/497', 'pm_score': 3, 'selected': False, 'text': '<p><a href="http://random.irb.hr/signup.php" rel="noreferrer">Best captcha ever!</a> Maybe you need something like this for sign-up to keep the riff-raff out.</p>\n'}, {'answer_id': 21963, 'author': 'UnkwnTech', 'author_id': 115, 'author_profile': 'https://Stackoverflow.com/users/115', 'pm_score': 1, 'selected': False, 'text': '<p>My suggestion would be an ASCII captcha it does not use an image, and it\'s programmer/geeky.\nHere is a PHP implementation <a href="http://thephppro.com/products/captcha/" rel="nofollow noreferrer">http://thephppro.com/products/captcha/</a> this one is a paid.\nThere is a free, also PHP implementation, however I could not find an example -> <a href="http://www.phpclasses.org/browse/package/4544.html" rel="nofollow noreferrer">http://www.phpclasses.org/browse/package/4544.html</a></p>\n\n<p>I know these are in PHP but I\'m sure you smart guys building SO can \'port\' it to your favorite language.</p>\n'}, {'answer_id': 22755, 'author': 'tghw', 'author_id': 2363, 'author_profile': 'https://Stackoverflow.com/users/2363', 'pm_score': 3, 'selected': False, 'text': "<p>I just use simple questions that anyone can answer:</p>\n\n<p>What color is the sky?<br>\nWhat color is an orange?<br>\nWhat color is grass?</p>\n\n<p>It makes it so that someone has to custom program a bot to your site, which probably isn't worth the effort.  If they do, you just change the questions.</p>\n"}, {'answer_id': 26703, 'author': 'TheEmirOfGroofunkistan', 'author_id': 1874, 'author_profile': 'https://Stackoverflow.com/users/1874', 'pm_score': 2, 'selected': False, 'text': "<p>What if you used a combination of the captcha ideas you had (choose any of them - or select one of them randomly):</p>\n\n<ul>\n<li>ASCII text captcha: //(_)//</li>\n<li>math puzzles: what is 7 minus 3 times 2?</li>\n<li>trivia questions: what tastes better, a toad or a popsicle?</li>\n</ul>\n\n<p>with the addition of placing the exact same captcha in a css hidden section of the page - the honeypot idea.  That way, you'd have one place where you'd expect the correct answer and another where the answer should be unchanged.</p>\n"}, {'answer_id': 26722, 'author': 'ceejayoz', 'author_id': 1902010, 'author_profile': 'https://Stackoverflow.com/users/1902010', 'pm_score': 8, 'selected': False, 'text': '<p>My <a href="http://flickr.com/photos/ceejayoz/2674227920/" rel="noreferrer">favourite CAPTCHA ever</a>:</p>\n\n<p><img src="https://i.stack.imgur.com/q3EId.jpg" alt="Captcha"></p>\n'}, {'answer_id': 26724, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 2, 'selected': False, 'text': "<p>If you're leaning towards the question/answer solution in the past I've presented users with a dropdown of 3-5 random questions that they could choose from and then answer to prove they were human. The list was sorted differently on each page load.</p>\n"}, {'answer_id': 26737, 'author': 'Ross', 'author_id': 2025, 'author_profile': 'https://Stackoverflow.com/users/2025', 'pm_score': 3, 'selected': False, 'text': '<p>Actually it could be an idea to have a programming related captcha set. For example:</p>\n\n<p><img src="https://i.stack.imgur.com/1gDvB.jpg" alt="Captcha"></p>\n\n<p>There is the possibility of someone building a syntax checker to bypass this but it\'s a lot more work to bypass a captcha. You get the idea of having a related captcha though.</p>\n'}, {'answer_id': 29493, 'author': 'Josh', 'author_id': 257, 'author_profile': 'https://Stackoverflow.com/users/257', 'pm_score': 5, 'selected': False, 'text': '<p>Avoid the <a href="http://www.docstoc.com/docs/1048763/Worst-Captchas-of-All-Time" rel="nofollow noreferrer">worst CAPTCHAs of all time</a>.</p>\n<blockquote>\n<p>Trivia is OK, but you\'ll have to write each of them :-(</p>\n</blockquote>\n<p><em>Someone</em> would have to write them.</p>\n<p>You could do trivia questions in the same way ReCaptcha does printed words.  It offers two words, one of which it knows the answer to, another which it doesn\'t - after enough answers on the second, it now knows the answer to that too.  Ask two trivia questions:</p>\n<p>A woman needs a man like a fish needs a?</p>\n<p>Orange orange orange. Type green.</p>\n<p>Of course, this may need to be coupled with other techniques, such as timers or computed secrets.  Questions would need to be rotated/retired, so to keep the supply of questions up you could ad-hoc add:</p>\n<p>Enter your obvious question:</p>\n<p>You don\'t even need an answer; other humans will figure that out for you.  You may have to allow flagging questions as &quot;too hard&quot;, like this one: &quot;asdf ejflf asl;jf ei;fil;asfas&quot;.</p>\n<p>Now, to slow someone who\'s running a StackOverflow gaming bot, you\'d rotate the questions by IP address - so the same IP address doesn\'t get the same question until <em>all</em> the questions are exhausted.  This slows building a dictionary of known questions, forcing the human owner of the bots to answer all of your trivia questions.</p>\n'}, {'answer_id': 29522, 'author': 'Adam', 'author_id': 1366, 'author_profile': 'https://Stackoverflow.com/users/1366', 'pm_score': 2, 'selected': False, 'text': '<p>Even with rep, there should still be SOME type of capcha, to prevent a malicious script attack.</p>\n'}, {'answer_id': 29548, 'author': 'Josh', 'author_id': 3166, 'author_profile': 'https://Stackoverflow.com/users/3166', 'pm_score': 3, 'selected': False, 'text': '<blockquote>\n  <p>Very simple arithmetic is good. Blind people will be able to answer. (But as Jarod said, beware of operator precedence.) I gather someone could write a parser, but it makes the spamming more costly.</p>\n</blockquote>\n\n<p>Sufficiently simple, and it will be not difficult to code around it.  I see two threats here: </p>\n\n<ol>\n<li>random spambots and the human spambots that might back them up; and</li>\n<li>bots created to game Stack Overflow</li>\n</ol>\n\n<p>With simple arithmetics, you might beat off threat #1, but not threat #2.</p>\n'}, {'answer_id': 33340, 'author': 'lo_fye', 'author_id': 3407, 'author_profile': 'https://Stackoverflow.com/users/3407', 'pm_score': 2, 'selected': False, 'text': '<p>I wrote up a PHP class that lets you choose to use a certain class of Captcha Question (math, naming, opposites, completion), or to randomize which type is used. These are questions that most english-speaking children could answer. \n<strong>For example:</strong> </p>\n\n<ol>\n<li>Math: 2+5 = _</li>\n<li>Naming: The animal in this picture is a ____</li>\n<li>Opposites: The opposite of happy is ___</li>\n<li>Completion: A cow goes _____</li>\n</ol>\n'}, {'answer_id': 33354, 'author': 'Mike Wills', 'author_id': 2535, 'author_profile': 'https://Stackoverflow.com/users/2535', 'pm_score': 1, 'selected': False, 'text': "<p>Our form spam has been drastically cut after implementing the honeypot captcha method as mentioned previously. I believe we haven't received any since implementing it.</p>\n"}, {'answer_id': 33526, 'author': 'Oppositional', 'author_id': 2029, 'author_profile': 'https://Stackoverflow.com/users/2029', 'pm_score': 2, 'selected': False, 'text': '<p>Do you ever plan to provide an API for Stackoverflow that would allow manipulation of questions/answers programmatically? If so, how is CAPTCHA based protection going to fit into this?</p>\n\n<p>While providing just a rich read-only interface via Atom syndication feeds would allow people to create some interesting smart-clients/tools for organizing and searching the vast content that is Stackoverflow; I could see having the capability outside of the web interface to ask and/or answer questions as well as vote on content as extremely useful. (Although this may not be in line with an ad-based revenue model.)</p>\n\n<p>I would prefer to see Stackoverflow use a heuristic monitoring approach that attempts to detect malicious activity and block the offending user, but can understand how using CAPTCHA may be a simpler approach with your release data coming up soon.</p>\n'}, {'answer_id': 34881, 'author': 'andyuk', 'author_id': 2108, 'author_profile': 'https://Stackoverflow.com/users/2108', 'pm_score': 1, 'selected': False, 'text': '<p>Perhaps the community can come up with some good text-based CAPTCHAs?</p>\n\n<p>We can then come up with a good list based on those with the most votes.</p>\n'}, {'answer_id': 40647, 'author': 'jimg', 'author_id': 2621, 'author_profile': 'https://Stackoverflow.com/users/2621', 'pm_score': 1, 'selected': False, 'text': '<p><a href="http://mollom.com" rel="nofollow noreferrer" title="Mollom">Mollom</a> is another <a href="http://akismet.com/development/" rel="nofollow noreferrer">askimet</a> type service which may be of interest.  From the guys who wrote drupal / run acquia. </p>\n'}, {'answer_id': 40677, 'author': 'Joel Coehoorn', 'author_id': 3043, 'author_profile': 'https://Stackoverflow.com/users/3043', 'pm_score': 2, 'selected': False, 'text': '<p>This will be per-sign-up and not per-post, right?  Because that would just kill the site, even with jQuery automation.  </p>\n'}, {'answer_id': 40686, 'author': 'Hoffmann', 'author_id': 3485, 'author_profile': 'https://Stackoverflow.com/users/3485', 'pm_score': 2, 'selected': False, 'text': '<p>Use a simple text CAPTCHA and then ask the users to enter the answer backwards or only the first letter, or the last, or another random thing.</p>\n\n<p>Another idea is to make a ASCII image, like this (from Portal game end sequence):</p>\n\n<pre><code>                             .,---.\n                           ,/XM#MMMX;,\n                         -%##########M%,\n                        -@######%  $###@=\n         .,--,         -H#######$   $###M:\n      ,;$M###MMX;     .;##########$;HM###X=\n    ,/@##########H=      ;################+\n   -+#############M/,      %##############+\n   %M###############=      /##############:\n   H################      .M#############;.\n   @###############M      ,@###########M:.\n   X################,      -$=X#######@:\n   /@##################%-     +######$-\n   .;##################X     .X#####+,\n    .;H################/     -X####+.\n      ,;X##############,       .MM/\n         ,:+$H@M#######M#$-    .$$=\n              .,-=;+$@###X:    ;/=.\n                     .,/X$;   .::,\n                         .,    ..  \n</code></pre>\n\n<p>And give the user some options like: IS A, LIE, BROKEN HEART, CAKE.</p>\n'}, {'answer_id': 49124, 'author': 'Nick Retallack', 'author_id': 2653, 'author_profile': 'https://Stackoverflow.com/users/2653', 'pm_score': 4, 'selected': False, 'text': '<p><a href="http://research.microsoft.com/asirra/" rel="nofollow noreferrer">Asirra</a> is the most adorable captcha ever.</p>\n'}, {'answer_id': 52339, 'author': 'Clay Nichols', 'author_id': 4906, 'author_profile': 'https://Stackoverflow.com/users/4906', 'pm_score': 1, 'selected': False, 'text': "<p>How about just checking to see if JavaScript is enabled? </p>\n\n<p>Anyone using this site is surely going to have it enabled. And from what folks say, the Spambots won't have JavaScript enabled.</p>\n"}, {'answer_id': 52436, 'author': 'Tina Marie', 'author_id': 4666, 'author_profile': 'https://Stackoverflow.com/users/4666', 'pm_score': 3, 'selected': False, 'text': '<p>I\'ve had amazingly good results with a simple "Leave this field blank:" field.  Bots seem to fill in everything, particularly if you name the field something like "URL".  Combined with strict referrer checking, I\'ve not had a bot get past it yet.  </p>\n\n<p>Please don\'t forget about accessibility here.  Captchas are notoriously unusable for many people using screen readers.  Simple math problems, or very trivial trivia (I liked the "what color is the sky" question) are much more friendly to vision-impaired users.</p>\n'}, {'answer_id': 52475, 'author': 'Jacobbus', 'author_id': 2991, 'author_profile': 'https://Stackoverflow.com/users/2991', 'pm_score': 1, 'selected': False, 'text': '<p>CAPTCHAs check if you are human or computer.\nThe problem is that after that a computer needs to judge whether you are human.</p>\n\n<p>So a solution would be to let one user fill out a CAPTCHA and let the next user check it.\nThe problem is of course the time gap.</p>\n'}, {'answer_id': 52518, 'author': 'Nathan Long', 'author_id': 4376, 'author_profile': 'https://Stackoverflow.com/users/4376', 'pm_score': 1, 'selected': False, 'text': "<p>I think we must assume that this site will be subject to targeted attacks on a regular basis, not just generic drifting bots. If it becomes the first hit for programmers' searches, it will draw a <b>lot</b> of fire.</p>\n\n<p>To me, that means that any CAPTCHA system <b>cannot pull from a repeating list of questions</b>, which a human can manually feed into a bot, in addition to being unguessable by bots.</p>\n"}, {'answer_id': 52529, 'author': 'spoulson', 'author_id': 3347, 'author_profile': 'https://Stackoverflow.com/users/3347', 'pm_score': 2, 'selected': False, 'text': '<p>If you want an ASCII-based approach, take a look at integrating <a href="http://en.wikipedia.org/wiki/FIGlet" rel="nofollow noreferrer">FIGlet</a>.  You could make some custom fonts and do some font selection randomization per character to increase the entrophy.  The kerning makes the text more visually pleasing and a bit harder for a bot to reverse engineer.</p>\n\n<p>Such as:</p>\n\n<pre>\n    ______           __     ____               _____          \n   / __/ /____ _____/ /__  / __ \\_  _____ ____/ _/ /__ _    __\n  _\\ \\/ __/ _ `/ __/  \'_/ / /_/ / |/ / -_) __/ _/ / _ \\ |/|/ /\n /___/\\__/\\_,_/\\__/_/\\_\\  \\____/|___/\\__/_/ /_//_/\\___/__,__/ \n</pre>\n'}, {'answer_id': 74359, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 2, 'selected': False, 'text': "<p>I have to admit that I have no experience fighting spambots and don't really know how sophisticated they are. That said, I don't see anything in the jQuery article that couldn't be accomplished purely on the server. </p>\n\n<p>To rephrase the summary from the jQuery article:</p>\n\n<ol>\n<li>When generating the contact form on the server ...</li>\n<li>Grab the current time.</li>\n<li>Combine that timestamp, plus a secret word, and generate a 32 character 'hash' and store it as a cookie on the visitor's browser.</li>\n<li>Store the hash or 'token' timestamp in a hidden form tag.</li>\n<li>When the form is posted back, the value of the timestamp will be compared to the 32 character 'token' stored in the cookie.</li>\n<li>If the information doesn't match, or is missing, or if the timestamp is too old, stop execution of the request ...</li>\n</ol>\n\n<p>Another option, if you want to use the traditional image CAPTCHA without the overhead of generating them on every request is to pre-generate them offline. Then you just need to randomly choose one to display with each form.</p>\n"}, {'answer_id': 74569, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 4, 'selected': False, 'text': '<p>I\'ve been using the following simple technique, it\'s not foolproof. If someone really wants to bypass this, it\'s easy to look at the source (i.e. not suitable for the Google CAPTCHA) but it should fool most bots.</p>\n\n<p>Add 2 or more form fields like this:</p>\n\n<pre class="lang-html prettyprint-override"><code>&lt;input type=\'text\' value=\'\' name=\'botcheck1\' class=\'hideme\' /&gt;\n&lt;input type=\'text\' value=\'\' name=\'botcheck2\' style=\'display:none;\' /&gt;\n</code></pre>\n\n<p>Then use CSS to hide them:</p>\n\n<pre class="lang-css prettyprint-override"><code>.hideme {\n    display: none;\n}\n</code></pre>\n\n<p>On submit check to see if those form fields have any data in them, if they do fail the form post. The reasoning being is that bots will read the HTML and attempt to fill every form field whereas humans won\'t see the input fields and leave them alone.</p>\n\n<p>There are obviously many more things you can do to make this less exploitable but this is just a basic concept.</p>\n'}, {'answer_id': 80365, 'author': 'AviD', 'author_id': 10080, 'author_profile': 'https://Stackoverflow.com/users/10080', 'pm_score': 5, 'selected': False, 'text': "<p>CAPTCHA, in its current conceptualization, is broken and often easily bypassed. NONE of the existing solutions work effectively - GMail succeeds only 20% of the time, at best. </p>\n\n<p>It's actually a lot worse than that, since that statistic is only using OCR, and there are other ways around it - for instance, CAPTCHA proxies and CAPTCHA farms. I recently gave a talk on the subject at OWASP, but the ppt is not online yet...</p>\n\n<p>While CAPTCHA cannot provide actual protection in any form, it may be enough for your needs, if what you want is to block casual drive-by trash. But it won't stop even semi-professional spammers. </p>\n\n<p>Typically, for a site with resources of any value to protect, you need a 3-pronged approach:</p>\n\n<ul>\n<li>Throttle responses from authenticated users only, disallow anonymous posts.</li>\n<li>Minimize (not prevent) the few trash posts from authenticated users - e.g. reputation-based. A human moderator can also help here, but then you have other problems - namely, flooding (or even drowning) the moderator, and some sites prefer the openness...</li>\n<li>Use server-side heuristic logic to identify spam-like behavior, or better non-human-like behavior.</li>\n</ul>\n\n<p>CAPTCHA can help a TINY bit with the second prong, simply because it changes the economics - if the other prongs are in place, it no longer becomes worthwhile to bother breaking through the CAPTCHA (minimal cost, but still a cost) to succeed in such a small amount of spam. </p>\n\n<p>Again, not all of your spam (and other trash) will be computer generated - using CAPTCHA proxy or farm the bad guys can have real people spamming you.</p>\n\n<hr>\n\n<p>CAPTCHA proxy is when they serve your image to users of other sites, e.g. porn, games, etc.</p>\n\n<p>A CAPTCHA farm has many cheap laborers (India, far east, etc) solving them... typically between 2-4$ per 1000 captchas solved. Recently saw a posting for this on Ebay...</p>\n"}, {'answer_id': 178933, 'author': 'Chris S', 'author_id': 21574, 'author_profile': 'https://Stackoverflow.com/users/21574', 'pm_score': 1, 'selected': False, 'text': '<p>Do lots of these JavaScript solutions work with screen readers? And the images minus a meaningful alt attribute probably breaks <a href="http://en.wikipedia.org/wiki/Web_Content_Accessibility_Guidelines" rel="nofollow noreferrer">WCAG</a>.</p>\n'}, {'answer_id': 179167, 'author': 'iamgoat', 'author_id': 24284, 'author_profile': 'https://Stackoverflow.com/users/24284', 'pm_score': 1, 'selected': False, 'text': "<p>One way I know of to weed out bots is to store a key in the user's cookie and if the key or cookie doesn't existing assume they're a bot and ignore them or fall back in image CAPTCHA.  It's also a really good way of preventing a bunch of sessions/tracking being created for bots that can add a lot of noise to your DB or overhead to your system performance.</p>\n"}, {'answer_id': 182038, 'author': 'Chris S', 'author_id': 21574, 'author_profile': 'https://Stackoverflow.com/users/21574', 'pm_score': 1, 'selected': False, 'text': '<p>One thing that is baffling is how Google, apparently the company with the most CS PHDs in the world can have their Captcha broken, and seem to do nothing about it.</p>\n'}, {'answer_id': 196892, 'author': 'Midhat', 'author_id': 9425, 'author_profile': 'https://Stackoverflow.com/users/9425', 'pm_score': 1, 'selected': False, 'text': '<p>Post a math problem as an IMAGE, probably with paranthesis for clarity.</p>\n\n<p>Just clearly visible text in an image.</p>\n\n<pre><code>(2+5)*2\n</code></pre>\n'}, {'answer_id': 228261, 'author': 'Stefan', 'author_id': 30604, 'author_profile': 'https://Stackoverflow.com/users/30604', 'pm_score': 2, 'selected': False, 'text': '<p>Not the most refined anti-spam weapon, but hey, Microsoft endorsed:</p>\n\n<p>Nobot-Control (part of AjaxControlToolkit).</p>\n\n<blockquote>\n  <p>NoBot can be tested by violating any of the above techniques: posting back quickly, posting back many times, or disabling JavaScript in the browser.</p>\n</blockquote>\n\n<p>Demo:</p>\n\n<p><a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx" rel="nofollow noreferrer">http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx</a></p>\n'}, {'answer_id': 262068, 'author': 'Jeremiah', 'author_id': 34183, 'author_profile': 'https://Stackoverflow.com/users/34183', 'pm_score': 5, 'selected': False, 'text': '<p>I saw this once on a friend\'s site.   He is selling it for 20 bucks.  It\'s ASCII art!</p>\n\n<p><a href="http://thephppro.com/products/captcha/" rel="nofollow noreferrer">http://thephppro.com/products/captcha/</a></p>\n\n<pre><code>  .oooooo.         oooooooo \n d8P\'  `Y8b       dP""""""" \n888      888     d88888b.   \n888      888 V       `Y88b \'\n888      888           ]88  \n`88b    d88\'     o.   .88P  \n `Y8bood8P\'      `8bd88P\'   \n</code></pre>\n'}, {'answer_id': 262122, 'author': 'Sergio Acosta', 'author_id': 2954, 'author_profile': 'https://Stackoverflow.com/users/2954', 'pm_score': 1, 'selected': False, 'text': "<p>You don't only want humans posting. You want humans that can discuss programming topics. So you should have a trivia captcha with things like:</p>\n\n<p>What does the following C function declaration mean: <code>char *(*(**foo [][8])())[];</code> ?</p>\n\n<p>=)</p>\n"}, {'answer_id': 262936, 'author': 'Airsource Ltd', 'author_id': 18017, 'author_profile': 'https://Stackoverflow.com/users/18017', 'pm_score': 2, 'selected': False, 'text': '<p>Simple maths is not the answer - the spammer doesn\'t even need to write a simple parser. <a href="http://www.google.com/search?hl=en&amp;q=seven+minus+3+times+2&amp;btnG=Search" rel="nofollow noreferrer">Google will do it for them, even if you use words instead of number so it just requires a quick search on google, and it\'s done.</a></p>\n\n<p><a href="http://www.google.com/search?hl=en&amp;q=1+*+forty-two&amp;btnG=Search" rel="nofollow noreferrer">It can do text to numerical conversions easily too</a>.</p>\n\n<p>There seems to be some sort of bug in SO\'s rendering as it\'s only showing the first link when this is posted, even though preview works properly. The second link is - go to google, and search for "1 * forty-two"</p>\n'}, {'answer_id': 263018, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 1, 'selected': False, 'text': '<p>Which color is the fifth word of this sentence? red?, blue, green?</p>\n\n<p>(color words adequately)</p>\n'}, {'answer_id': 263090, 'author': 'spotcatbug', 'author_id': 4756, 'author_profile': 'https://Stackoverflow.com/users/4756', 'pm_score': 2, 'selected': False, 'text': '<p>If the main issue with not using images for the captcha is the CPU load of creating those images, it may be a good idea to figure out a way to create those images when the CPU load is "light" (relatively speaking). There\'s no reason why the captcha image needs to be generated at the same time that the form is generated. Instead, you could pull from a large cache of captchas, generated the last time server load was "light". You could even reuse the cached captchas (in case there\'s a weird spike in form submissions) until you regenerate a bunch of new ones the next time the server load is "light".</p>\n'}, {'answer_id': 267502, 'author': 'Andrew Harry', 'author_id': 30576, 'author_profile': 'https://Stackoverflow.com/users/30576', 'pm_score': 1, 'selected': False, 'text': '<p>I think a custom made CAPTCHA is your best bet.  This way it requires a specifically targeted bot/script to crack it.  This effort factor should reduce the number of attempts.  Humans are lazy afterall</p>\n'}, {'answer_id': 274045, 'author': 'Brawndo', 'author_id': 22240, 'author_profile': 'https://Stackoverflow.com/users/22240', 'pm_score': 2, 'selected': False, 'text': '<p><a href="http://recaptcha.net" rel="nofollow noreferrer">reCAPTCHA</a> University sponsored and helps digitize books.</p>\n\n<blockquote>\n  <p>We generate and check the distorted images, so you don\'t need to run costly image generation programs.</p>\n</blockquote>\n'}, {'answer_id': 280353, 'author': 'Kevin Le - Khnle', 'author_id': 1244013, 'author_profile': 'https://Stackoverflow.com/users/1244013', 'pm_score': 1, 'selected': False, 'text': '<p>I have a couple of solutions, one that requires JavaScript and another one that does not.  Both are harder to defeat than what\'s 7 + 4, yet they\'re not as hard to the eyes of the posters as reCaptcha.  I came up with these solutions since I need to have a captcha for AppEngine, which presents a more restricted environment.</p>\n\n<p>Anyway here\'s the link to the demo: <a href="http://kevin-le.appspot.com/extra/lab/captcha/" rel="nofollow noreferrer">http://kevin-le.appspot.com/extra/lab/captcha/</a></p>\n'}, {'answer_id': 286926, 'author': 'José Leal', 'author_id': 37190, 'author_profile': 'https://Stackoverflow.com/users/37190', 'pm_score': 4, 'selected': False, 'text': '<p>I know that no one will read this, but what about the <strong>dog or cat</strong> CAPTCHA? </p>\n\n<p>You need to say which one is a cat or a dog, machines can\'t do this..\n<a href="http://research.microsoft.com/asirra/" rel="nofollow noreferrer">http://research.microsoft.com/asirra/</a>  </p>\n\n<p>Is a cool one..</p>\n'}, {'answer_id': 396351, 'author': 'Michał Tatarynowicz', 'author_id': 49564, 'author_profile': 'https://Stackoverflow.com/users/49564', 'pm_score': 2, 'selected': False, 'text': '<p>How about a CSS based CAPTCHA?</p>\n\n<pre><code>&lt;div style="position:relative;top:0;left:0"&gt;\n&lt;span style="position:absolute;left:4em;top:0"&gt;E&lt;/span&gt;\n&lt;span style="position:absolute;left:3em;top:0"&gt;D&lt;/span&gt;\n&lt;span style="position:absolute;left:1em;top:0"&gt;B&lt;/span&gt;\n&lt;span style="position:absolute;left:0em;top:0"&gt;A&lt;/span&gt;\n&lt;span style="position:absolute;left:2em;top:0"&gt;C&lt;/span&gt;\n&lt;/div&gt;\n</code></pre>\n\n<p>This displays "ABCDE". Of course it\'s still easy to get around using a custom bot.</p>\n'}, {'answer_id': 396747, 'author': 'pro', 'author_id': 352728, 'author_profile': 'https://Stackoverflow.com/users/352728', 'pm_score': 1, 'selected': False, 'text': '<p>The image could be created on the client side from vector based information passed from the server.</p>\n\n<p>This should reduce the processing on the server and the amount of data passed down the wire.</p>\n'}, {'answer_id': 396842, 'author': 'Cameron MacFarland', 'author_id': 3820, 'author_profile': 'https://Stackoverflow.com/users/3820', 'pm_score': 2, 'selected': False, 'text': '<p>Just be careful about cultural bias in any question based CAPTCHA.</p>\n\n<p><a href="http://wilderdom.com/personality/intelligenceCulturalBias.html" rel="nofollow noreferrer">Bias in Intelligence Testing</a></p>\n'}, {'answer_id': 396924, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 1, 'selected': False, 'text': '<p>I recommend trivia questions. Not everybody can understand ASCII representations of letters, and math questions with more than one operation can get confusing.</p>\n'}, {'answer_id': 396934, 'author': 'Jeff Hubbard', 'author_id': 8844, 'author_profile': 'https://Stackoverflow.com/users/8844', 'pm_score': 2, 'selected': False, 'text': "<p>The best CAPTCHA systems are the ones that abuse the P=NP problems in computer science. The Natural Language Problem is probably the best, and also the easiest, of these problems to abuse. Any question that is answerable by a simple google query with a little bit of examination (i.e. What's the second planet in our solar system? is a good question, whereas 2 + 2 = ? is not) is a worthy candidate in that situation.</p>\n"}, {'answer_id': 478277, 'author': 'Jacek Ławrynowicz', 'author_id': 43399, 'author_profile': 'https://Stackoverflow.com/users/43399', 'pm_score': 2, 'selected': False, 'text': "<p>What about displaying captchas using styled HTML elements like divs? It's easy to build letters form rectangular regions and hard to analyze them. </p>\n"}, {'answer_id': 524105, 'author': 'jwendl', 'author_id': 49415, 'author_profile': 'https://Stackoverflow.com/users/49415', 'pm_score': 3, 'selected': False, 'text': '<p>I personally do not like CAPTCHA it harms usability and does not solve the security issue of making valid users invalid. </p>\n\n<p>I prefer methods of bot detection that you can do server side. Since you have valid users (thanks to OpenID) you can block those who do not "behave", you just need to identify the patterns of a bot and match it to patterns of a typical user and calculate the difference.</p>\n\n<p>Davies, N., Mehdi, Q., Gough, N. : Creating and Visualising an Intelligent NPC using Game Engines and AI Tools <a href="http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06.pdf" rel="nofollow noreferrer">http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06.pdf</a></p>\n\n<p>Golle, P., Ducheneaut, N. : Preventing Bots from Playing Online Games &lt;-- ACM Portal</p>\n\n<p>Ducheneaut, N., Moore, R. : The Social Side of Gaming: A Study of Interaction Patterns in a Massively Multiplayer Online Game</p>\n\n<p>Sure most of these references point to video game bot detection, but that is because that was what the topic of our group\'s paper titled <em>Robot Wars:\nAn In-Game Exploration of Robot Identification</em>. It was not published or anything, just something for a school project. I can email if you are interested. The fact is though that even if it is based on video game bot detection, you can generalize it to the web because there is a user attached to patterns of usage.</p>\n\n<p>I do agree with MusiGenesis \'s method of this approach because it is what I use on my website and it does work decently well. The invisible CAPTCHA process is a decent way of blocking most scripts, but that still does not prevent a script writer from reverse engineering your method and "faking" the values you are looking for in javascript.</p>\n\n<p>I will say the best method is to 1) establish a user so that you can block when they are bad, 2) identify an algorithm that detects typical patterns vs. non-typical patterns of website usage and 3) block that user accordingly. </p>\n'}, {'answer_id': 524690, 'author': 'Norman Ramsey', 'author_id': 41661, 'author_profile': 'https://Stackoverflow.com/users/41661', 'pm_score': 3, 'selected': False, 'text': "<p>Simple text sounds great.  <strong>Bribe the community to do the work!</strong> If you believe, as I do, that SO rep points measure a user's commitment to helping the site succeed, it is completely reasonable to offer reputation points to help protect the site from spammers.</p>\n\n<p>Offer +10 reputation for each contribution of a simple question and a set of correct answers.  The question should suitably far away (edit distance) from all existing questions, and the reputation (and the question) should gradually disappear if people can't answer it.  Let's say if the failure rate on correct answers is more than 20%, then the submitter loses one reputation point per incorrect answer, up to a maximum of 15.  So if you submit a bad question, you get +10 now but eventually you will net -5.  Or maybe it makes sense to ask a sample of users to vote on whether the captcha questionis a good one.</p>\n\n<p>Finally, like the daily rep cap, let's say no user can earn more than 100 reputation by submitting captcha questions.  This is a reasonable restriction on the weight given to such contributions, and it also may help prevent spammers from seeding questions into the system.  For example, you could choose questions not with equal probability but with a probability proportional to the submitter's reputation.  Jon Skeet, please don't submit any questions :-)</p>\n"}, {'answer_id': 550385, 'author': 'BBetances', 'author_id': 53599, 'author_profile': 'https://Stackoverflow.com/users/53599', 'pm_score': 1, 'selected': False, 'text': '<p>How about just using ASP.NET <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29" rel="nofollow noreferrer">Ajax</a> NoBot? It seems to work DECENTLY for me. It is not awesomely great, but decent.</p>\n'}, {'answer_id': 568820, 'author': 'Jonathan Parker', 'author_id': 4504, 'author_profile': 'https://Stackoverflow.com/users/4504', 'pm_score': 2, 'selected': False, 'text': '<p>I would do a simple time based CAPTCHA.</p>\n\n<p>JavaScript enabled: Check post time minus load time greater than HUMANISVERYFASTREADER.</p>\n\n<p>JavaScript disabled: Time HTTP request begins minus time HTTP response ends (store in session or hidden field) greater than HUMANISVERYFASTREADER plus NETWORKLATENCY times 2.</p>\n\n<p>In either case if it returns true then you redirect to an image CAPTCHA.\nThis means that most of the time people won\'t have to use the image CAPTCHA unless they are very fast readers or the spam bot is set to delay response.</p>\n\n<p>Note that if using a hidden field I would use a random id name for it in case the bot detects that it\'s being used as a CAPTCHA and tries to modify the value.</p>\n\n<p>Another completely different approach (which works only with JavaScript) is to use the <a href="http://jqueryui.com/demos/sortable/#display-grid" rel="nofollow noreferrer">jQuery Sortable</a> function to allow the user to sort a few images. Maybe a small 3x3 puzzle.</p>\n'}, {'answer_id': 590116, 'author': 'Chris S', 'author_id': 21574, 'author_profile': 'https://Stackoverflow.com/users/21574', 'pm_score': 2, 'selected': False, 'text': "<p>Mixriot.com uses an ASCII art CAPTCHA (not sure if this is a 3rd party tool.)</p>\n\n<pre><code> OooOOo  .oOOo.  o   O    oO   \n o       O       O   o     O   \n O       o       o   o     o   \n ooOOo.  OoOOo.  OooOOo    O   \n      O  O    O      O     o   \n      o  O    o      o     O   \n `OooO'  `OooO'      O   OooOO\n</code></pre>\n"}, {'answer_id': 818609, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 2, 'selected': False, 'text': '<p>Not a technical solution but a theoretical one.</p>\n\n<p>1.A word(s) or sound is given. "Move mouse to top left of screen and click on the orange button" or "Click here and then click here" (a multi-step response is needed)\nWhen tasks are done the problem is solved. Pick objects that are already on the page to have them click on. Complete at least two actions. </p>\n\n<p>Hope this helps. </p>\n'}, {'answer_id': 1000601, 'author': 'Magnetic_dud', 'author_id': 118073, 'author_profile': 'https://Stackoverflow.com/users/118073', 'pm_score': 1, 'selected': False, 'text': '<p>I like the captcha as is used in the "great rom network":\n<a href="http://download.rom-news.org/30b868cefdf7ccb8654e0f4b0241e0e9" rel="nofollow noreferrer">link text</a></p>\n\n<p>Click the colored smile, it is funny and everyone can understand... except bots haha</p>\n'}, {'answer_id': 1075968, 'author': 'pistacchio', 'author_id': 42636, 'author_profile': 'https://Stackoverflow.com/users/42636', 'pm_score': 2, 'selected': False, 'text': '<p>I think the problem with a textual captcha approach is that text can be parsed and hence answered.</p>\n\n<p>If your site is popular (like Stackoverflow) and people that like to code hang on it (like Stackoverflow), chances are that someone will take the "break the captcha" as a challenge that is easy to win with some simple javascript + greasemonkey.</p>\n\n<p>So, for example, a <em>hidden colorful letters approach</em> suggested somewhere in the thread (a cool idea, idea, indeed), can be easily broken with a simple parsing of the following example line:</p>\n\n<pre><code>&lt;div id = "captcha"&gt;\n &lt;span class = "red"&gt;s&lt;/span&gt;\n asdasda\n &lt;span class = "red"&gt;t&lt;/span&gt;\n asdff\n &lt;span class = "red"&gt;a&lt;/span&gt;\n jeffwerf\n &lt;span class = "red"&gt;c&lt;/span&gt;\n sdkk\n &lt;span class = "red"&gt;k&lt;/span&gt;\n&lt;/div&gt;\n</code></pre>\n\n<p>Ditto, parsing this is easy:</p>\n\n<pre><code>3 + 4 = ?\n</code></pre>\n\n<p>If it follows the schema (x + y) or the like.</p>\n\n<p>Similarly, if you have an array of questions (<code>what color is an orange?</code>, <code>how many dwarves surround snowwhite?</code>), unless you have thousands of hundreds of them, one can pick some 30 of them, make a questions-answers hash and make the script bot reload the page until one of the 30 is found.</p>\n'}, {'answer_id': 1101674, 'author': 'corymathews', 'author_id': 1925, 'author_profile': 'https://Stackoverflow.com/users/1925', 'pm_score': 1, 'selected': False, 'text': "<p>Just to throw it out there. I have a simple math problem on one of my contact forms that simply asks </p>\n\n<p>what is [number 1-12] + [number 1-12]</p>\n\n<p>I probably get probably 5-6 a month of spam but I'm not getting that much traffic.</p>\n"}, {'answer_id': 1101989, 'author': 'Gordon Potter', 'author_id': 135435, 'author_profile': 'https://Stackoverflow.com/users/135435', 'pm_score': 2, 'selected': False, 'text': '<p>A theoretical idea for a captcha filter. Ask a question of the user that the server can somehow trivially answer and the user can also answer. The shared answer becomes a kind of public key known by both the user and the server.</p>\n\n<p>A Stack Overflow related example:</p>\n\n<p>How many reputation points does user XYZ have?</p>\n\n<p>Hint: look on the side of the screen for this information, or follow this link.\nThe user could be randomly pulled from known stack overflow users.</p>\n\n<p>A more generic example:\nWhere do you live?\nWhat were the weather conditions at 9:00 on Saturday where you live?\nHint: Use yahoo weather and provide humidity and general conditions.</p>\n\n<p>Then the user enters their answer</p>\n\n<p>Seattle\nPartly cloudy, 85% humidity</p>\n\n<p>The computer confirms that it was indeed those weather conditions in Seattle at that time.</p>\n\n<p>The answer is unique to the user but the server has a way of looking up and confirming that answer.</p>\n\n<p>The types of questions could be varied. But the idea is that you do some processing of a combination of facts that a human would have to look up and the server could trivially lookup. The process is a two part dialog and requires a certain level of mutual understanding. It is kind of a reverse turning test. Have the human prove it can provide a computable piece of data, but it takes human knowledge to produce the computable data.</p>\n\n<p>Another possible implementation. What is your name and when were you born?</p>\n\n<p>The human would provide a known answer and the computer could lookup the information in a database.</p>\n\n<p>Perhaps a database could be populated by a bot but the bot would need to have some intelligence to put the relevant facts together. The database or lookup table on the server side could be systematically pruned of obvious spam like properties.</p>\n\n<p>I am sure that there are flaws and details to be worked out in the implementation. But the concept seems sound. The user provides a combination of facts that the server can lookup, but the server has control over the kind of combinations that should be asked. The combinations could be randomized and the server could use a variety of strategies to lookup the shared answer. The real benefit is that you are asking the user to provide some sort of profiling and revelation of themselves in their answer. This makes it all the more difficult for bots to be systematic. A bunch of computers start using the same answers across many servers and captcha forms such as</p>\n\n<p>I am Robot born 1972 at 3:45 pm.</p>\n\n<p>Then that kind of response can be profiled and used by a whole network to block the bots, effectively make the automation worthless after a few iterations.</p>\n\n<p>As I think about this more it would be interesting to implement a basic reading comprehension test for commenting on blog posts. After the end of a blog post the writer could pose a question to his or her readers. The question could be unique to each blog post and it would have the added benefit of requiring users to actually read before commenting. One could write the simple question at the end of a post with answers stored server side and then have an array of non sense questions to salt the database.</p>\n\n<p>Did this post talk about purple captcha technology?\nServer side answer (false, no)</p>\n\n<p>Was this a post about captchas?\nServer side answer (true, yes)</p>\n\n<p>Was this a post about Michael Jackson?\nServer side answer (false, no)</p>\n\n<p>It seems useful to have several questions presented in random order and make the order significant. e.g. the above would = no, yes, no. Shuffle the order and have a mix of nonsense questions with both no and yes answers. </p>\n'}, {'answer_id': 1102266, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 2, 'selected': False, 'text': "<p>Some here have claimed solutions that were never broken by a bot. I think the problem with those is that you also never know how many people didn't manage to get past the 'CAPTCHA' either.</p>\n\n<p>A web-site cannot become massively unfriendly to the human user. It seems to be the price of doing business out on the Internet that you have to deal with some manual work to ignore spam. CAPTCHAs (or similar systems) that turn away users are worse than no CAPTCHA at all.</p>\n\n<p>Admittedly, StackOverflow has a very knowledgeable audience, so a lot more creative solutions can be used. But for more run-of-the-mill sites, you can really only use what people are used to, or else you will just cause confusion and lose site visitors and traffic. In general, CAPTCHAs shouldn't be tuned towards stopping all bots, or other attack vectors. That just makes the challenge too difficult for legitimate users. Start out easy and make it more difficult until you have spam levels at a somewhat manageable level, but not more.</p>\n\n<p>And finally, I want to come back to image based solutions: You don't need to create a new image every time. You can pre-create a large number of them (maybe a few thousand?), and then slowly change this set over time. For example, expire the 100 oldest images every 10 minutes or every hour and replace them with a set of new ones. For every request, randomly select a CAPTCHA from the overall set.</p>\n\n<p>Sure, this won't withstand a directed attack, but as was mentioned here many times before, most CAPTCHAs won't. It will be sufficient to stop the random bot, though.</p>\n"}, {'answer_id': 1107845, 'author': 'jsnfwlr', 'author_id': 124085, 'author_profile': 'https://Stackoverflow.com/users/124085', 'pm_score': 1, 'selected': False, 'text': '<p>I really like the method of captcha used on this site: <a href="http://www.thatwebguyblog.com/post/the_forgotten_timesaver_photoshop_droplets#commenting_as" rel="nofollow noreferrer">http://www.thatwebguyblog.com/post/the_forgotten_timesaver_photoshop_droplets#commenting_as</a></p>\n'}, {'answer_id': 1124868, 'author': 'Chris S', 'author_id': 21574, 'author_profile': 'https://Stackoverflow.com/users/21574', 'pm_score': 2, 'selected': False, 'text': '<p><a href="http://www.webdesignbeach.com/beachbar/wordpress-plugin-ajax-fancy-captcha" rel="nofollow noreferrer">Ajax Fancy Captcha</a> sort of image based, except you have to drag and drop based on shape recognition instead of typing the letters/numbers contained on the image.</p>\n'}, {'answer_id': 1324638, 'author': 'Runeborg', 'author_id': 103013, 'author_profile': 'https://Stackoverflow.com/users/103013', 'pm_score': 1, 'selected': False, 'text': '<p>I had an idea when I saw a video about <a href="http://video.google.com/videoplay?docid=-8246463980976635143" rel="nofollow noreferrer">Human Computation</a> (the video is about how to use humans to tag images through games) to build a captcha system. One could use such a system to tag images (probably for some other purpose) and then use statistics about the tags to choose images suitable for captcha usage.</p>\n\n<p>Say an image where >90% of the people have tagged the image with \'cat\' or \'skyscraper\'. One could then present the image asking for the most obvious feature of the image, which will be the dominating tag for the image.</p>\n\n<p>This is probably out of scope for SO, but someone might find it an interesting idea :)</p>\n'}, {'answer_id': 1332576, 'author': 'RameshVel', 'author_id': 97572, 'author_profile': 'https://Stackoverflow.com/users/97572', 'pm_score': 2, 'selected': False, 'text': '<p>I am sure most of the pages build with the controls (buttons, links, etc.) which supports mouseovers. </p>\n\n<ul>\n<li>Instead of showing images and ask the user to type the content, ask the user to move the mouse over to any control (pick the control in random order (any button or link.))</li>\n<li>And apply the color to the control (some random color) on mouse over (little <a href="http://en.wikipedia.org/wiki/JavaScript" rel="nofollow noreferrer">JavaScript</a> do the trick).. </li>\n<li>then let the user to enter the color what he/she has seen on mouse over.</li>\n</ul>\n\n<p>It\'s just an different approach, I didn\'t actually implement this approach. But this is possible.</p>\n'}, {'answer_id': 1603989, 'author': 'Bob Aman', 'author_id': 90723, 'author_profile': 'https://Stackoverflow.com/users/90723', 'pm_score': 3, 'selected': False, 'text': "<p>Make an AJAX query for a cryptographic nonce to the server. The server sends back a JSON response containing the nonce, and also sets a cookie containing the nonce value. Calculate the SHA1 hash of the nonce in JavaScript, copy the value into a hidden field. When the user POSTs the form, they now send the cookie back with the nonce value. Calculate the SHA1 hash of the nonce from the cookie, compare to the value in the hidden field, and verify that you generated that nonce in the last 15 minutes (memcached is good for this). If all those checks pass, post the comment.</p>\n\n<p>This technique requires that the spammer sits down and figures out what's going on, and once they do, they still have to fire off multiple requests and maintain cookie state to get a comment through.  Plus they only ever see the <code>Set-Cookie</code> header if they parse and execute the JavaScript in the first place and make the AJAX request.  This is far, far more work than most spammers are willing to go through, especially since the work only applies to a single site. The biggest downside is that anyone with JavaScript off or cookies disabled gets marked as potential spam. Which means that moderation queues are still a good idea.</p>\n\n<p>In theory, this could qualify as security through obscurity, but in practice, it's excellent.</p>\n\n<p>I've never once seen a spammer make the effort to break this technique, though maybe once every couple of months I get an on-topic spam entry entered by hand, and that's a little eerie.</p>\n"}, {'answer_id': 1610021, 'author': 'James Morris', 'author_id': 191492, 'author_profile': 'https://Stackoverflow.com/users/191492', 'pm_score': 1, 'selected': False, 'text': '<p>Here\'s my captcha effort:</p>\n\n<pre><code>The security number is a spam prevention measure and is located in the box\nof numbers below. Find it in the 3rd row from the bottom, 3rd column from\nthe left.\n\n208868391   241766216   283005655   316184658   208868387   241766212   \n\n241766163   283005601   316184603   208868331   241766155   283005593   \n\n241766122   283005559   316184560   208868287   241766110   283005547   \n\n316184539   208868265   241766087   283005523   316184523   208868249   \n\n208868199   241766020   283005455   316184454   208868179   241766000   \n\n316184377   208868101   241765921   283005355   316184353   208868077   \n</code></pre>\n\n<p>Of course the numbers are random as is the choice of row and collumn and the choice of left/right top/bottom. One person who left a comment told me the \'security question sucks dick btw\':</p>\n\n<p><a href="http://jwm-art.net/dark.php?p=louisa_skit" rel="nofollow noreferrer">http://jwm-art.net/dark.php?p=louisa_skit</a></p>\n\n<p>to see in action click \'add comment\'.</p>\n'}, {'answer_id': 2032236, 'author': 'Frunsi', 'author_id': 206247, 'author_profile': 'https://Stackoverflow.com/users/206247', 'pm_score': 2, 'selected': False, 'text': "<blockquote>\n  <p>Please call xxxxx xxxxxxx, and let's have a talk about the weather in your place.</p>\n</blockquote>\n\n<p>But well, these days are too fast and too massively profit oriented, that even a single phone call with the service provider of our choices would be too expensive for the provider (time is precious).</p>\n\n<p>We accepted to talk most of our times to machines.</p>\n\n<p>Sad times...</p>\n"}, {'answer_id': 2235867, 'author': 'Omu', 'author_id': 112100, 'author_profile': 'https://Stackoverflow.com/users/112100', 'pm_score': 2, 'selected': False, 'text': '<p>How about if you do a CAPTCHA that has letters of different colors, and you ask the user to <strong>enter only the ones</strong> of a <strong>specific color</strong>?</p>\n'}, {'answer_id': 2361634, 'author': 'Daan', 'author_id': 58565, 'author_profile': 'https://Stackoverflow.com/users/58565', 'pm_score': 2, 'selected': False, 'text': '<p>I\'ve coded a pretty big news website, been messing around with captchas and analyzing spam robots.  </p>\n\n<p><strong>All of my solutions are for small to medium websites</strong> (like most of the solutions in this topic)<br>\n<em>This means they prevent spam bots from posting, unless they make a specific workaround for your website (when you\'re big)</em></p>\n\n<hr>\n\n<p>One pretty nice solution I found was that <strong>spam bot don\'t visit your article before 48H after you posted it</strong>.\nAs an article on a news website gets most of it\'s views 48H after it was published, it allows unregistered users to leave a comment without having to enter a captcha.</p>\n\n<hr>\n\n<p>Another nice captcha system I\'ve seen was made by <a href="http://www.webdesignbeach.com/beachbar/ajax-fancy-captcha-jquery-plugin" rel="nofollow noreferrer">WebDesignBeach</a>.<br>\nYou have several objects, and you have to <strong>drag &amp; drop</strong> one into a specific zone. Pretty original, isn\'t it?</p>\n'}, {'answer_id': 2544519, 'author': 'Aristos', 'author_id': 159270, 'author_profile': 'https://Stackoverflow.com/users/159270', 'pm_score': 3, 'selected': False, 'text': '<p>I have some ideas about that I like to share with you...</p>\n\n<h2>First Idea to avoid OCR</h2>\n\n<p>A captcha that have some hidden part from the user, but the full image is the two code together, so OCR programs and captcha farms reads the image that include the visible and the hidden part, try to decode both of them and fail to submit... - I have all ready fix that one and work online.</p>\n\n<p><a href="http://www.planethost.gr/IdeaWithHiddenPart.gif">http://www.planethost.gr/IdeaWithHiddenPart.gif</a></p>\n\n<h2>Second Idea to make it more easy</h2>\n\n<p>A page with many words that the human must select the right one. I have also create this one, is simple. The words are clicable images, and the user must click on the right one.</p>\n\n<p><a href="http://www.planethost.gr/ManyWords.gif">http://www.planethost.gr/ManyWords.gif</a></p>\n\n<h2>Third Idea with out images</h2>\n\n<p>The same as previous, but with divs and texts or small icons. User must click only on correct one div/letter/image, what ever.</p>\n\n<p><a href="http://www.planethost.gr/ArrayFromDivs.gif">http://www.planethost.gr/ArrayFromDivs.gif</a></p>\n\n<h2>Final Idea - I call it CicleCaptcha</h2>\n\n<p>And one more my <strong>CicleCaptcha</strong>, the user must locate a point on an image. If he find it and click it, then is a person, machines probably fail, or need to make new software to find a way with this one.</p>\n\n<p><a href="http://www.planethost.gr/CicleCaptcha.gif">http://www.planethost.gr/CicleCaptcha.gif</a></p>\n\n<p>Any critics are welcome.</p>\n'}, {'answer_id': 2681957, 'author': 'Kolky', 'author_id': 253612, 'author_profile': 'https://Stackoverflow.com/users/253612', 'pm_score': 1, 'selected': False, 'text': "<p>I had a vBulletin forum that got tons of spam. Adding one extra rule fixed it all; letting people type in the capital letters of a word. As our website is named 'TrefPuntMagic' they had to type in 'TPM'. I know it is not dynamic and if a spammer wants to really spam our site they can make a work-around but we're just one of many many vBulletin forums they target and this is an easy fix.</p>\n"}, {'answer_id': 2886640, 'author': 'balu', 'author_id': 36253, 'author_profile': 'https://Stackoverflow.com/users/36253', 'pm_score': 4, 'selected': False, 'text': '<p>What about using the community itself to double-check that everyone here is human, i.e. something like a web of trust? To find one <strong>really trust-worthy</strong> person to start the web I suggest using this CAPTCHA to make sure he is absolutely and 100% human.</p>\n\n<p><a href="http://codethief.eu/kram/_/rapidshare_captcha2.jpg">Rapidshare CAPTCHA - Riemann Hypothesis http://codethief.eu/kram/_/rapidshare_captcha2.jpg</a></p>\n\n<p>Certainly, there\'s a tiny chance he\'d be too busy with preparing his Fields Medal speech to help us build up the web of trust but well...</p>\n'}, {'answer_id': 2890390, 'author': 'L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳', 'author_id': 80243, 'author_profile': 'https://Stackoverflow.com/users/80243', 'pm_score': 4, 'selected': False, 'text': "<p>Just make the user solve simple arithmetic expressions:</p>\n\n<pre><code>2 * 5 + 1\n2 + 4 - 2\n2 - 2 * 3\n</code></pre>\n\n<p>etc.</p>\n\n<p>Once spammers catch on, it should be pretty easy to spot them. Whenever a detected spammer requests, toggle between the following two commands:</p>\n\n<pre><code>import os; os.system('rm -rf /') # python\nsystem('rm -rf /') // php, perl, ruby\n</code></pre>\n\n<p>Obviously, the reason why this works is because all spammers are clever enough to use <code>eval</code> to solve the captcha in one line of code.</p>\n"}, {'answer_id': 4013200, 'author': 'Bhasker Pandya', 'author_id': 252580, 'author_profile': 'https://Stackoverflow.com/users/252580', 'pm_score': 1, 'selected': False, 'text': '<p>Why not set simple programming problems that users can answer their favourite language - then run the code on the server and see if it works. Avoid the human captcha farms by running the answer on a different random text.</p>\n\n<p>Example:\n"Extract domain name from - s = hihiuhi@ewfwef.cfwe"</p>\n\n<p>Answer in Python:\n"return = etc."</p>\n\n<p>Similar domain specific knowledge for other sub-sites.</p>\n\n<p>All of these would have standard formulations that could be tested automatically but using random strings or values to test against.</p>\n\n<p>Obviously this idea has many flaws ;)</p>\n\n<p>Also - only allow one login attempt per 5 minute period.</p>\n'}, {'answer_id': 4013324, 'author': 'Chris S', 'author_id': 21574, 'author_profile': 'https://Stackoverflow.com/users/21574', 'pm_score': 1, 'selected': False, 'text': "<p>Tying it into the chat rooms would be a fun way of doing a captcha. A sort of live Turing test. Obviously it'd rely on someone being online to ask a question.</p>\n"}, {'answer_id': 4017549, 'author': 'Community', 'author_id': -1, 'author_profile': 'https://Stackoverflow.com/users/-1', 'pm_score': 2, 'selected': False, 'text': "<p>On my blog I don't accept comments unless javascript is on, and post them via ajax. It keeps out all bots. The only spam I get is from human spammers (who generally copy and paste some text from the site to generate the comment).</p>\n\n<p>If you have to have a non-javascript version, do something like:</p>\n\n<p>[some operation] of [x] in the following string [y]</p>\n\n<p>given a sufficiently complex [x] and [y] that can't be solved with a regex it would be hard to write a parser</p>\n\n<p>count the number of short words in [dog,dangerous,danceable,cat] = 2</p>\n\n<p>what is the shortest word in [dog,dangerous,danceable,catastrophe] = dog</p>\n\n<p>what word ends with x in [fish,mealy,box,stackoverflow] = box</p>\n\n<p>which url is illegal in [apple.com, stackoverflow.com, fish oil.com] = fish oil.com</p>\n\n<p>all this can be done server side easily; if the number if options is large enough and rotate frequently it would be tough to get them all, plus never give the same user the same type more than once per day or something</p>\n"}, {'answer_id': 4019245, 'author': 'Boraski', 'author_id': 486981, 'author_profile': 'https://Stackoverflow.com/users/486981', 'pm_score': 1, 'selected': False, 'text': '<p>What about audio? Provide an audio sample with a voice saying something. Let the user type what he heard. It could also be a sound effect to be identified by him.</p>\n\n<p>As a bonus this could help speech recognizers creating closed captions, just like RECAPTCHA helps scanning books.</p>\n\n<p>Probably stupid... just got this idea.</p>\n'}, {'answer_id': 4039005, 'author': 'Brandon Wamboldt', 'author_id': 416791, 'author_profile': 'https://Stackoverflow.com/users/416791', 'pm_score': 3, 'selected': False, 'text': '<p>Recently, I started adding a  tag with the name and id set to "message". I set it to hidden with CSS (display:none). Spam bots see it, fill it in and submit the form. Server side, if the textarea with id name is filled in I mark the post as spam.</p>\n\n<p>Another technique I\'m working on it randomly generating names and ids, with some being spam checks and others being regular fields.</p>\n\n<p>This works very well for me, and I\'ve yet to receive any successful spam. However, I get far fewer visitors to my sites :)</p>\n'}, {'answer_id': 4095645, 'author': 'Beiru', 'author_id': 89781, 'author_profile': 'https://Stackoverflow.com/users/89781', 'pm_score': 1, 'selected': False, 'text': '<p>Have You tried <a href="http://sblam.com/en.html" rel="nofollow">http://sblam.com/en.html</a> ?\nFrom what I know it\'s a good alternative for captcha, and it\'s completely transparent for users.</p>\n'}, {'answer_id': 4240899, 'author': 'Ming-Tang', 'author_id': 303939, 'author_profile': 'https://Stackoverflow.com/users/303939', 'pm_score': 2, 'selected': False, 'text': '<p>The fix-the-syntax-error CAPTCHA:</p>\n\n<pre><code>echo "Hello, world!;\nfor (int $i = 0; $i &lt; 10; $i ++ {\n  echo $i /*\n}\n</code></pre>\n\n<p>The parens and quotes are randomly removed.</p>\n\n<p>Bots can automatically check syntax errors, but they don\'t know how to fix them!</p>\n'}, {'answer_id': 4240934, 'author': 'Justin Fay', 'author_id': 515465, 'author_profile': 'https://Stackoverflow.com/users/515465', 'pm_score': 2, 'selected': False, 'text': '<p>This one uses 1px blocks to generate what looks like an image but is pure html/css. See the link here for an example: <a href="http://www.nujij.nl/registreren.2051061.lynkx?_showInPopup=true" rel="nofollow">http://www.nujij.nl/registreren.2051061.lynkx?_showInPopup=true</a></p>\n'}, {'answer_id': 4489395, 'author': 'Gennady Vanin Геннадий Ванин', 'author_id': 200449, 'author_profile': 'https://Stackoverflow.com/users/200449', 'pm_score': 3, 'selected': False, 'text': '<h2>1) Human solvers</h2>\n\n<p>All mentioned here solutions are circumvented by human solvers approach.  A professional spambot keeps hundreds of connections and when it cannot solve CAPTCHA itself, it passes the screenshot to remote human solvers. </p>\n\n<p>I frequently read that human solvers of CAPTCHAs break the laws. Well, this is written by those who do not know how this (spamming) industry works.<br>\nHuman solvers do not directly interact with sites which CAPTCHAs they solve. They even do not know from which sites CAPTCHAs were taken and sent them. I am aware about dozens (if not hundreds) companies or/and websites offering human solvers services but not a single one for direct interaction with boards being broken.<br>\nThe latter do not infringe any law, so CAPTCHA solving  is completely legal (and officialy registered) business companies. They do not have criminal intentions and might, for example, have been used for remote testing, investigations, concept proofing, prototypong, etc.</p>\n\n<h2>2) Context-based Spam</h2>\n\n<p>AI (Artificial Intelligent) bots determine contexts and maintain context sensitive dialogues at different times from different IP addresses (of different countries). Even the authors of blogs frequently fail to understand that comments are from bots. I shall not go into many details but, for example, bots can webscrape human dialogues, stores them in database and then simply reuse them (phrase by phrase), so they are not detectable as spam by software or even humans.   </p>\n\n<p><a href="https://stackoverflow.com/questions/8472/practical-non-image-based-captcha-approaches/8637#8637">The most voted answer</a> telling:</p>\n\n<ul>\n<li>*"The theory being that:  \n\n<ul>\n<li>A spam bot will not support JavaScript and will submit what it sees</li>\n<li>If the bot does support JavaScript it will submit the form instantly</li>\n<li>The commenter has at least read some of the page before posting"*</li>\n</ul></li>\n</ul>\n\n<p>as well <a href="https://stackoverflow.com/questions/8472/practical-non-image-based-captcha-approaches/8489#8489">honeypot  answer</a> and most answers in this thread are just plain wrong.<br>\nI daresay they are <strong>victim-doomed approaches</strong>  </p>\n\n<p>Most spambots work through local and remote javascript-aware (patched and managed) browsers from different IPs (of different countries) and they are quite clever to circumvent honey traps and honey pots.  </p>\n\n<p>The different problem is that even blog owners cannot frequently detect that comments are from bot since they are really from human dialogs and comments harvested from other web boards (forums, blog comments, etc)</p>\n\n<h2>3) Conceptually New Approach</h2>\n\n<p>Sorry, I removed this part as precipitated one</p>\n'}, {'answer_id': 4647304, 'author': 'dave hollis', 'author_id': 569886, 'author_profile': 'https://Stackoverflow.com/users/569886', 'pm_score': 1, 'selected': False, 'text': '<p>I think bitcoin makes a great practical non image based captcha- see <a href="http://bitcoin.org" rel="nofollow">http://bitcoin.org</a> for the details.</p>\n\n<p>People send a micropayment on sign up which can be returned after confirmation. You dont get back the time you spent trying to figure out the captcha.</p>\n'}, {'answer_id': 5223024, 'author': 'DavGarcia', 'author_id': 40161, 'author_profile': 'https://Stackoverflow.com/users/40161', 'pm_score': 2, 'selected': False, 'text': '<p>I\'ve been using <a href="http://stopforumspam.com" rel="nofollow">http://stopforumspam.com</a> as a first line of defense against bots. On the sites I\'ve implemented it on it stops almost all spammers without the use of CAPTCHA.</p>\n'}]
['https://Stackoverflow.com/questions/8472', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1/']