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

想法吗?


当前回答

我一直在用下面这个简单的技巧,但也不是万无一失。如果有人真的想绕过这个,很容易查看源代码(即不适合谷歌验证码),但它应该愚弄大多数机器人。

像这样添加2个或更多的表单字段:

<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />

然后使用CSS隐藏它们:

.hideme {
    display: none;
}

在提交时检查这些表单字段中是否有任何数据,如果它们确实未能提交表单。理由是,机器人将读取HTML并尝试填充每个表单字段,而人类不会看到输入字段,并让它们单独存在。

显然,你可以做更多的事情来减少这种利用,但这只是一个基本概念。

其他回答

我有两个解决方案,一个需要JavaScript,另一个不需要。两者都比7 + 4更难打败,但在海报上看,它们都没有reCaptcha那么难。我想出了这些解决方案,因为我需要为AppEngine提供验证码,而AppEngine提供了一个更受限制的环境。

不管怎样,这里有演示的链接:http://kevin-le.appspot.com/extra/lab/captcha/

把它扔出去。我有一个简单的数学问题在我的联系方式之一,简单地问

什么是[数字1-12]+[数字1-12]

我可能一个月收到5-6封垃圾邮件,但我没有那么多流量。

我曾经在一个朋友的网站上看到过这个。他卖了20美元。这是ASCII艺术!

http://thephppro.com/products/captcha/

  .oooooo.         oooooooo 
 d8P'  `Y8b       dP""""""" 
888      888     d88888b.   
888      888 V       `Y88b '
888      888           ]88  
`88b    d88'     o.   .88P  
 `Y8bood8P'      `8bd88P'   

不是技术解决方案,而是理论解决方案。

1.给出一个单词或一个声音。“将鼠标移动到屏幕左上角,点击橙色按钮”或“点击这里,然后点击这里”(需要多步响应) 当任务完成了,问题就解决了。选择已经在页面上的对象,让它们单击。至少完成两个动作。

希望这能有所帮助。

基于CSS的验证码怎么样?

<div style="position:relative;top:0;left:0">
<span style="position:absolute;left:4em;top:0">E</span>
<span style="position:absolute;left:3em;top:0">D</span>
<span style="position:absolute;left:1em;top:0">B</span>
<span style="position:absolute;left:0em;top:0">A</span>
<span style="position:absolute;left:2em;top:0">C</span>
</div>

这将显示“ABCDE”。当然,使用自定义机器人仍然很容易。