看起来我们将为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>兼容的验证码,如果可能的话。

想法吗?


当前回答

回答最初的问题:

ASCII很糟糕:我不得不眯着眼睛才能找到“WOW”。这是正确的吗?它可以是“VVOVV”或其他什么; 非常简单的算术很好。盲人也能回答。(但正如Jarod所说,要注意操作符优先级。)我想有人可以编写一个解析器,但这使得垃圾邮件的成本更高。 琐事是可以的,但你必须把它们都写出来:-(

我看过动物的照片[那是什么?]。漫画投票使用一个人物的图片,他们的名字写在图像的某处[输入名字]。不可能解析,对盲人来说不行。

您可以使用音频回退读取字母和数字(与验证码中的字母和数字相同)。

最后一道防线:使垃圾邮件易于报告(一键)和易于删除(一个重述屏幕检查是否是垃圾邮件帐户,显示最后十条消息,一键删除帐户)。不过,这仍然很费时。

其他回答

只是在任何基于验证码的问题中都要小心文化偏见。

智力测试中的偏见

如何显示9个随机的几何形状,并要求用户选择两个正方形,或两个圆或其他。应该很容易写,也很容易使用。

没有什么比你无法正确阅读短信更糟糕的了……

如果你倾向于问题/答案解决方案,我曾经向用户展示了3-5个随机问题,他们可以从中选择,然后回答来证明他们是人类。该列表在每次页面加载时排序不同。

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

如果你的网站很受欢迎(如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个小矮人中的一个。

这将是每次注册,而不是每次发布,对吧?因为这只会杀死站点,即使使用jQuery自动化。