看起来我们将为Stack Overflow添加CAPTCHA支持。这对于防止机器人、垃圾邮件发送者和其他恶意脚本活动是必要的。我们只希望人类在这里发布或编辑东西!

我们将使用JavaScript (jQuery)验证码作为第一道防线:

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

这种方法的优点是,对于大多数人来说,CAPTCHA永远不会可见!

然而,对于禁用JavaScript的人,我们仍然需要一个备用方案,这就是棘手的地方。

我为ASP编写了一个传统的CAPTCHA控件。NET,我们可以重复使用。

但是,我更倾向于使用一些文本化的东西,以避免为每个请求在服务器上创建所有这些图像的开销。

我见过这样的事情…

ASCII文本验证码:\/\/(_)\/\/ 数学难题:7减3乘以2等于多少? 小问题:癞蛤蟆和冰棍,哪个更好吃?

也许我只是在风车这里倾斜,但我希望有一个更少的资源密集型,非图像为基础的<noscript>兼容的验证码,如果可能的话。

想法吗?


当前回答

Mixriot.com使用ASCII艺术验证码(不确定这是否是第三方工具)。

 OooOOo  .oOOo.  o   O    oO   
 o       O       O   o     O   
 O       o       o   o     o   
 ooOOo.  OoOOo.  OooOOo    O   
      O  O    O      O     o   
      o  O    o      o     O   
 `OooO'  `OooO'      O   OooOO

其他回答

我认为文本验证码方法的问题在于文本可以被解析并因此得到回答。

如果你的网站很受欢迎(如Stackoverflow),人们喜欢代码挂在它(如Stackoverflow),很有可能有人会把“打破验证码”作为一个挑战,很容易赢得一些简单的javascript + greasemonkey。

因此,例如,在线程的某个地方建议隐藏彩色字母的方法(确实是一个很酷的想法,想法),可以通过以下示例行简单解析轻松打破:

<div id = "captcha">
 <span class = "red">s</span>
 asdasda
 <span class = "red">t</span>
 asdff
 <span class = "red">a</span>
 jeffwerf
 <span class = "red">c</span>
 sdkk
 <span class = "red">k</span>
</div>

同样,解析这个也很简单:

3 + 4 = ?

如果它遵循模式(x + y)或类似的。

类似地,如果你有一组问题(橙色是什么颜色?比如,白雪公主周围有多少个小矮人?),除非你有成千上万个小矮人,否则你可以从其中挑选30个,生成一个问答散列,然后让脚本机器人重新加载页面,直到找到这30个小矮人中的一个。

Mollom是另一个可能感兴趣的askimet类型服务。来自那些编写drupal /运行acquia的人。

我最喜欢的验证码:

避免最糟糕的验证码。

琐事是可以的,但你必须把它们都写出来:-(

总得有人来写。

你可以用ReCaptcha打印单词的方式来回答一些琐事问题。它提供了两个单词,其中一个它知道答案,另一个它不知道——在第二个单词的答案足够多之后,它现在也知道了那个单词的答案。问两个小问题:

女人需要男人,就像鱼需要鱼一样。

橙色橙色橙色橙色。绿色的类型。

当然,这可能需要与其他技术相结合,例如计时器或计算秘密。问题需要轮换/退出,所以为了保持问题的供应,你可以特别添加:

进入你显而易见的问题:

你甚至不需要答案;其他人会帮你弄清楚的。你可能要允许把问题标记为“太难了”,比如这个:“asdf ejflf asl;jf ei;fil;asfas”。

现在,为了让正在运行StackOverflow游戏机器人的人慢下来,你可以根据IP地址旋转问题-所以相同的IP地址不会得到相同的问题,直到所有的问题都耗尽。这减慢了构建已知问题字典的速度,迫使机器人的人类所有者回答你所有的琐事问题。

我用一个简单的“Leave this field空白:”字段就得到了惊人的好结果。机器人似乎什么都填,特别是如果你把字段命名为“URL”。加上严格的推荐人检查,我还没有一个机器人通过它。

请不要忘记可访问性。对于使用屏幕阅读器的人来说,验证码是出了名的不可用。简单的数学问题或非常琐碎的琐事(我喜欢“天空是什么颜色”的问题)对视力受损的用户更友好。