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

想法吗?


当前回答

一种选择是带外通信;服务器可以向用户发送即时消息(或短信?),然后他/她必须在验证码字段中输入该消息。

这给用户带来了一个“非此即彼”的要求——要么你必须启用JavaScript,要么你必须登录到你所选择的IM服务。虽然它可能不像上面的一些其他解决方案那么灵活,但它适用于绝大多数用户。

那些拥有编辑权限的人,可以随意添加优点/缺点,而不是单独提交回复。

优点:

可访问:许多IM客户端支持读取传入消息。一些基于web的客户端将与屏幕阅读器一起工作。

缺点:

javascript禁用的用户现在依赖于OpenID之上的另一个服务的正常运行时间。 机器人将导致额外的服务器资源使用(发送带外通信),除非实现额外的保护

其他回答

我有两个解决方案,一个需要JavaScript,另一个不需要。两者都比7 + 4更难打败,但在海报上看,它们都没有reCaptcha那么难。我想出了这些解决方案,因为我需要为AppEngine提供验证码,而AppEngine提供了一个更受限制的环境。

不管怎样,这里有演示的链接:http://kevin-le.appspot.com/extra/lab/captcha/

有人还建议使用Raphael JavaScript库,它显然可以让你在所有流行的浏览器的客户端上作画:

http://dmitry.baranovskiy.com/raphael/

.. 但这并不完全适用于我的<noscript>情况,不是吗?:)

如果只是检查JavaScript是否启用了呢?

任何使用这个网站的人都肯定会启用它。据人们所说,垃圾邮件机器人不会启用JavaScript。

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

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

我最喜欢的验证码: