看起来我们将为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)概念上的新方法

抱歉,我把这部分去掉了

其他回答

虽然类似的讨论开始了:

我们正在一个经常进行数据挖掘的应用程序上尝试这个解决方案:

一个更好的验证码控制(看妈-没有图像!)

你可以在我们的建筑检查搜索中看到它的作用。

您可以查看Source并看到CAPTCHA只是HTML。

避免最糟糕的验证码。

琐事是可以的,但你必须把它们都写出来:-(

总得有人来写。

你可以用ReCaptcha打印单词的方式来回答一些琐事问题。它提供了两个单词,其中一个它知道答案,另一个它不知道——在第二个单词的答案足够多之后,它现在也知道了那个单词的答案。问两个小问题:

女人需要男人,就像鱼需要鱼一样。

橙色橙色橙色橙色。绿色的类型。

当然,这可能需要与其他技术相结合,例如计时器或计算秘密。问题需要轮换/退出,所以为了保持问题的供应,你可以特别添加:

进入你显而易见的问题:

你甚至不需要答案;其他人会帮你弄清楚的。你可能要允许把问题标记为“太难了”,比如这个:“asdf ejflf asl;jf ei;fil;asfas”。

现在,为了让正在运行StackOverflow游戏机器人的人慢下来,你可以根据IP地址旋转问题-所以相同的IP地址不会得到相同的问题,直到所有的问题都耗尽。这减慢了构建已知问题字典的速度,迫使机器人的人类所有者回答你所有的琐事问题。

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

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

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

我只是用了一些任何人都能回答的简单问题:

天空是什么颜色的? 橙子是什么颜色? 草是什么颜色?

这使得有人必须为您的网站定制一个机器人程序,这可能不值得付出努力。如果有,你就改题。

在目前的概念中,CAPTCHA是不完善的,而且经常很容易被绕过。现有的解决方案没有一个是有效的——GMail最多只有20%的成功率。

实际情况要糟糕得多,因为这个统计数据只使用了OCR,还有其他方法可以绕过它——例如,CAPTCHA代理和CAPTCHA农场。我最近在OWASP做了一个关于这个主题的演讲,但是ppt还没有上线…

虽然CAPTCHA不能以任何形式提供实际的保护,但如果你想要阻止随意路过的垃圾,它可能足以满足你的需求。但它甚至无法阻止半专业的垃圾邮件发送者。

通常,对于一个有价值的资源需要保护的网站,你需要三个方面的方法:

限制来自认证用户的回复,不允许匿名帖子。 最小化(而不是阻止)来自认证用户的少数垃圾帖子-例如基于声誉的。人工版主在这里也可以提供帮助,但随后你会遇到其他问题——即充斥(甚至淹没)版主,而一些网站更喜欢开放…… 使用服务器端启发式逻辑来识别类似垃圾邮件的行为,或者更好的非人类行为。

验证码可以在第二个方面提供一点帮助,只是因为它改变了经济状况——如果其他方面都到位了,那么为了在如此少量的垃圾邮件中成功突破验证码(最低成本,但仍然是成本)就不再值得了。

同样,不是所有的垃圾邮件(和其他垃圾邮件)都是计算机生成的-使用CAPTCHA代理或农场坏人可以让真人发送垃圾邮件给你。


验证码代理是指他们将你的图像提供给其他网站的用户,如色情网站、游戏网站等。

验证码农场有很多廉价的劳动力(印度、远东等)来解决这些问题……通常每1000个验证码解决2-4美元。最近在Ebay上看到了这个帖子……