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

想法吗?


当前回答

我有一个vBulletin论坛,收到了大量的垃圾邮件。添加一个额外的规则解决了这一切;让人们输入一个单词的大写字母。由于我们的网站名为“TrefPuntMagic”,他们不得不输入“TPM”。我知道它不是动态的,如果一个垃圾邮件制造者想要真正的垃圾邮件我们的网站,他们可以做一个工作,但我们只是许多许多vBulletin论坛他们的目标,这是一个简单的解决方案。

其他回答

我编写了一个相当大的新闻网站,一直在摆弄验证码和分析垃圾邮件机器人。

我所有的解决方案都是针对中小型网站的(就像这个主题中的大多数解决方案一样) 这意味着他们可以防止垃圾邮件机器人发布,除非他们为你的网站(当你很大的时候)制定了特定的解决方案。


我发现一个很好的解决方案是垃圾邮件机器人不会访问你的文章后48小时后,你发布它。 由于新闻网站上的一篇文章在发布后48小时内就能获得大部分浏览量,因此它允许非注册用户在无需输入验证码的情况下发表评论。


我见过的另一个很好的验证码系统是WebDesignBeach做的。 你有几个对象,你必须拖放一个到一个特定的区域。很有创意,不是吗?

蜜罐验证码怎么样?

我认为文本验证码方法的问题在于文本可以被解析并因此得到回答。

如果你的网站很受欢迎(如Stackoverflow),人们喜欢代码挂在它(如Stackoverflow),很有可能有人会把“打破验证码”作为一个挑战,很容易赢得一些简单的javascript + greasemonkey。

因此,例如,在线程的某个地方建议隐藏彩色字母的方法(确实是一个很酷的想法,想法),可以通过以下示例行简单解析轻松打破:

<div id = "captcha">
 <span class = "red">s</span>
 asdasda
 <span class = "red">t</span>
 asdff
 <span class = "red">a</span>
 jeffwerf
 <span class = "red">c</span>
 sdkk
 <span class = "red">k</span>
</div>

同样,解析这个也很简单:

3 + 4 = ?

如果它遵循模式(x + y)或类似的。

类似地,如果你有一组问题(橙色是什么颜色?比如,白雪公主周围有多少个小矮人?),除非你有成千上万个小矮人,否则你可以从其中挑选30个,生成一个问答散列,然后让脚本机器人重新加载页面,直到找到这30个小矮人中的一个。

你不只是想让人类发帖。你需要能够讨论编程主题的人。所以你应该有一个验证码,比如:

下面的C函数声明是什么意思:char *(*(**foo [][8])())[];?

=)

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