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

想法吗?


当前回答

@rob

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

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

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

其他回答

我的建议是ASCII验证码,它不使用图像,它是程序员/极客。 这是一个PHP实现http://thephppro.com/products/captcha/这是一个付费的。 有一个免费的,也是PHP实现,但我找不到一个例子-> http://www.phpclasses.org/browse/package/4544.html

我知道这些都是在PHP中,但我相信你们这些聪明的家伙构建SO可以“移植”到你最喜欢的语言。

有史以来最好的验证码!也许你需要像这样的东西来注册,以防止庸人进入。

除非我遗漏了什么,否则使用reCAPTCHA有什么问题,因为所有的工作都是在外部完成的。

只是一个想法。

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

我喜欢这个主意,难道我们就不能直接加入代表系统吗?我的意思是,任何拥有100 + rep的人都有可能是人类。所以如果他们有代表,你甚至不需要在验证码方面做任何事情。

然后,如果他们不是,然后发送它,我相信它不会花那么多帖子到100,社区会立即扑向任何似乎是带有攻击性标签的垃圾邮件,为什么不添加一个“报告垃圾邮件”链接,降低200?获得3个,垃圾邮件成就解锁,再见;)

编辑:我还应该补充一点,我喜欢非图像验证码的数学想法。或者是一个简单的谜语类型的东西。可能会让帖子更有趣^_^

我一直在用下面这个简单的技巧,但也不是万无一失。如果有人真的想绕过这个,很容易查看源代码(即不适合谷歌验证码),但它应该愚弄大多数机器人。

像这样添加2个或更多的表单字段:

<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />

然后使用CSS隐藏它们:

.hideme {
    display: none;
}

在提交时检查这些表单字段中是否有任何数据,如果它们确实未能提交表单。理由是,机器人将读取HTML并尝试填充每个表单字段,而人类不会看到输入字段,并让它们单独存在。

显然,你可以做更多的事情来减少这种利用,但这只是一个基本概念。