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

想法吗?


当前回答

如果你使用你所拥有的验证码想法的组合(选择其中任何一个-或随机选择一个):

ASCII文本验证码://(_)// 数学难题:7减3乘以2等于多少? 小问题:癞蛤蟆和冰棍,哪个更好吃?

加上在页面的CSS隐藏部分放置完全相同的验证码-蜜罐的想法。这样,你就有了一个地方可以得到正确答案,而另一个地方的答案应该是不变的。

其他回答

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

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


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


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

这将是每次注册,而不是每次发布,对吧?因为这只会杀死站点,即使使用jQuery自动化。

非常简单的算术很好。盲人也能回答。(但正如Jarod所说,要注意操作符优先级。)我想有人可以编写一个解析器,但这使得垃圾邮件的成本更高。

足够简单,并且围绕它编写代码并不困难。我看到了两个威胁:

随机的垃圾邮件机器人和可能支持它们的人类垃圾邮件机器人;而且 机器人创建游戏堆栈溢出

通过简单的算术,你可以打败威胁1,但不能打败威胁2。

如果没有一个真正的验证码作为第一道防线,你是不是仍然容易受到垃圾邮件发送者编写浏览器脚本的攻击(使用VB和IE很简单)?即加载页面,浏览DOM,点击提交按钮,重复…

如果只是检查JavaScript是否启用了呢?

任何使用这个网站的人都肯定会启用它。据人们所说,垃圾邮件机器人不会启用JavaScript。