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

想法吗?


当前回答

我有一个phpBB 2.0网站的垃圾邮件问题,我正在运行一段时间(该网站现在升级)。 我在pbpBB论坛上找到了一个自定义验证码mod,在一段时间内工作得很好。我发现真正的解决方案是将此与(在帐户创建页面上)额外的“必填”字段结合起来。我添加了;地点和职业(平淡无奇,但很容易了解)。机器人从未尝试填充这些,仍然认为验证码是每次尝试的失败点。

其他回答

@lance

谁说每个请求都必须在服务器上创建所有映像?也许你可以有一个静态的图片列表,或者从Flickr中获取它们。我喜欢“点击小猫”验证码的想法。http://www.thepcspy.com/kittenauth。

如果从静态图像列表中提取,绕过CAPTCHA就变得很简单,因为人类可以对它们进行分类,然后机器人就可以轻松地回答这些挑战。即使机器人不能回答所有问题,它仍然可以发送垃圾邮件。它只需要能够回答一小部分的验证码,因为当尝试失败时,它总是可以重试。

这实际上也是谜题的问题,因为拥有大量挑战是非常困难的。

在我的博客上,除非有javascript,否则我不接受评论,而是通过ajax发布评论。它把所有的机器人挡在外面。我收到的唯一垃圾邮件来自人类垃圾邮件发送者(他们通常从站点复制并粘贴一些文本来生成评论)。

如果你必须要有一个非javascript版本,可以这样做:

下面字符串[y]中[x]的[某些操作]

给定一个足够复杂的[x]和[y],无法用正则表达式求解,那么编写解析器就很难了

数一下[dog,dangerous,danceable,cat]中短单词的个数= 2

在[dog,dangerous,danceable,catastrophe] = dog中最短的单词是什么

哪个单词以x结尾,[fish,mealy,box,stackoverflow] = box

在[apple.com, stackoverflow.com, fish oil.com] = fish oil.com中,哪个url是非法的

所有这些都可以在服务器端轻松完成;如果选项的数量足够大,并且频繁轮换,那么就很难获得所有选项,再加上永远不要每天给同一用户相同类型的内容超过一次

使用样式化的HTML元素(如div)来显示验证码怎么样?从矩形区域中构造字母很容易,但很难分析它们。

我知道没人会读这篇文章,但是狗和猫的验证码呢?

你需要分辨出哪个是猫,哪个是狗,机器做不到。 http://research.microsoft.com/asirra/

是一个很酷的…

令人困惑的一件事是谷歌,显然是世界上拥有最多CS博士的公司,他们的验证码被破坏了,而且似乎没有采取任何措施。