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

想法吗?


当前回答

1)人工求解

这里提到的所有解都被人工求解方法所绕过。一个专业的垃圾邮件机器人拥有数百个连接,当它自己无法解决CAPTCHA时,它会将截图传递给远程人工解决者。

I frequently read that human solvers of CAPTCHAs break the laws. Well, this is written by those who do not know how this (spamming) industry works. Human solvers do not directly interact with sites which CAPTCHAs they solve. They even do not know from which sites CAPTCHAs were taken and sent them. I am aware about dozens (if not hundreds) companies or/and websites offering human solvers services but not a single one for direct interaction with boards being broken. The latter do not infringe any law, so CAPTCHA solving is completely legal (and officialy registered) business companies. They do not have criminal intentions and might, for example, have been used for remote testing, investigations, concept proofing, prototypong, etc.

2)基于上下文的垃圾邮件

AI(人工智能)机器人确定上下文,并在不同时间从不同的IP地址(不同国家)维护上下文敏感的对话。即使是博客的作者也经常不明白评论来自机器人。我不会说太多细节,但是,例如,机器人可以网络抓取人类对话,将它们存储在数据库中,然后简单地重用它们(一个短语一个短语),所以它们不会被软件甚至人类检测到是垃圾邮件。

投票最多的答案是:

*“理论是: 垃圾邮件机器人不支持JavaScript,只提交它看到的内容 如果机器人支持JavaScript,它会立即提交表单 评论者在发表“*”之前至少阅读了一些页面内容

还有蜜罐答案和这篇文章中的大多数答案都是完全错误的。 我敢说,这是一种注定会成为受害者的方法

大多数垃圾邮件机器人通过来自不同ip(不同国家)的本地和远程javascript感知(补丁和管理)浏览器工作,它们非常聪明地避开了蜜糖陷阱和蜜罐。

不同的问题是,即使是博客所有者也不能经常检测到来自机器人的评论,因为它们实际上来自人类对话和来自其他网络板(论坛,博客评论等)的评论。

3)概念上的新方法

抱歉,我把这部分去掉了

其他回答

我喜欢在“大rom网络”中使用的验证码: 链接文本

点击彩色的微笑,它很有趣,每个人都能理解…除了机器人哈哈

@lance

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

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

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

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

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

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

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

我开发的一个方法,似乎工作得很完美(虽然我可能不会像你一样收到那么多评论垃圾邮件),是有一个隐藏字段,并填充一个虚假的值,例如:

<input type="hidden" name="antispam" value="lalalala" />

然后,我有一段JavaScript,它每秒更新的值与页面已加载的秒数:

var antiSpam = function() {
        if (document.getElementById("antiSpam")) {
                a = document.getElementById("antiSpam");
                if (isNaN(a.value) == true) {
                        a.value = 0;
                } else {
                        a.value = parseInt(a.value) + 1;
                }
        }
        setTimeout("antiSpam()", 1000);
}

antiSpam();

然后当表单提交时,如果反垃圾邮件值仍然是“lalalala”,那么我将其标记为垃圾邮件。如果反垃圾邮件值是整数,我会检查它是否大于10(秒)。如果低于10,我把它标记为垃圾邮件,如果超过10,我就让它通过。

If AntiSpam = A Integer
    If AntiSpam >= 10
        Comment = Approved
    Else
        Comment = Spam
Else
    Comment = Spam

理论是:

垃圾邮件机器人不支持JavaScript,只提交它看到的内容 如果机器人支持JavaScript,它会立即提交表单 评论者在发帖前至少阅读了一些页面内容

这种方法的缺点是它需要JavaScript,如果您没有启用JavaScript,您的评论将被标记为垃圾邮件,但是,我确实会查看标记为垃圾邮件的评论,所以这不是问题。

回应评论

@MrAnalogy:服务器端方法听起来是一个很好的想法,和在JavaScript中完全一样。良好的电话。

@AviD:我知道这种方法很容易受到直接攻击,就像我在博客上提到的那样。然而,它将防御你的平均垃圾邮件机器人盲目提交垃圾的任何形式,它可以找到。

使用简单的文本验证码,然后要求用户倒着输入答案,或者只输入第一个字母,或者最后一个字母,或者其他随机的东西。

另一个想法是制作一个ASCII图像,像这样(来自《传送门》游戏结束序列):

                             .,---.
                           ,/XM#MMMX;,
                         -%##########M%,
                        -@######%  $###@=
         .,--,         -H#######$   $###M:
      ,;$M###MMX;     .;##########$;HM###X=
    ,/@##########H=      ;################+
   -+#############M/,      %##############+
   %M###############=      /##############:
   H################      .M#############;.
   @###############M      ,@###########M:.
   X################,      -$=X#######@:
   /@##################%-     +######$-
   .;##################X     .X#####+,
    .;H################/     -X####+.
      ,;X##############,       .MM/
         ,:+$H@M#######M#$-    .$$=
              .,-=;+$@###X:    ;/=.
                     .,/X$;   .::,
                         .,    ..  

并给用户一些选项,如:IS A, LIE, BROKEN HEART, CAKE。