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

想法吗?


当前回答

你看过威基斯吗?

Waegis是一个在线web服务,它公开了一个开放的API(应用程序编程接口)。它通过API方法获取传入数据,并应用快速检查,及时识别垃圾邮件和合法内容。然后它将结果返回给客户端,以指定内容是否是垃圾邮件。”

其他回答

简单的数学并不是答案——垃圾邮件发送者甚至不需要编写一个简单的解析器。谷歌将为他们做这件事,即使你使用单词而不是数字,所以它只需要在谷歌上快速搜索,它就完成了。

它也可以很容易地进行文本到数字的转换。

似乎有某种错误在SO的渲染,因为它只显示第一个链接时,这是张贴,即使预览工作正常。第二个链接是-进入谷歌,搜索“1 * 42”

@rob

蜜罐验证码怎么样? 哇,这么简单!看起来不错!尽管他们强调了无障碍问题。你认为这在SO会是一个问题吗?我个人觉得很难想象开发人员/程序员阅读屏幕有困难到需要屏幕阅读器的地步。

有些开发者不仅是法律上的盲人,而且是100%的盲人。手杖和辅助犬。我希望这个网站能支持他们在一个合理的方式。

然而,使用蜜罐验证码,您也可以放置一个隐藏的div,告诉他们将字段留空。如果他们填了,你也可以把它放在错误信息中,所以我不确定可访问性在这里有多大的问题。这肯定不太好,但也可能更糟。

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

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

非常简单的算术很好。盲人也能回答。(但正如Jarod所说,要注意操作符优先级。)我想有人可以编写一个解析器,但这使得垃圾邮件的成本更高。

足够简单,并且围绕它编写代码并不困难。我看到了两个威胁:

随机的垃圾邮件机器人和可能支持它们的人类垃圾邮件机器人;而且 机器人创建游戏堆栈溢出

通过简单的算术,你可以打败威胁1,但不能打败威胁2。

我的解决方案是将表单放在一个单独的页面上,并将时间戳传递给它。在该页上,我只在时间戳有效的情况下显示表单(不要太快,也不要太旧)。我发现机器人总是会直接点击提交页面,只有人类才能正确导航。

不会工作,如果你有内容页本身的形式,就像你现在做的,但你可以显示/隐藏链接到基于NoScript的特殊提交页面。对于这么小比例的用户来说,这是一个小小的不便。