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

想法吗?


当前回答

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

其他回答

如果只用ASP呢?NET Ajax NoBot?它似乎为我工作体面。它不是特别好,但还不错。

这里的一些人声称解决方案从未被机器人破坏过。我认为问题在于,你也不知道有多少人没有通过“验证码”。

一个网站不能变得对人类用户非常不友好。这似乎是在互联网上做生意的代价,你必须处理一些手工工作来忽略垃圾邮件。拒绝用户的验证码(或类似的系统)比根本没有验证码更糟糕。

Admittedly, StackOverflow has a very knowledgeable audience, so a lot more creative solutions can be used. But for more run-of-the-mill sites, you can really only use what people are used to, or else you will just cause confusion and lose site visitors and traffic. In general, CAPTCHAs shouldn't be tuned towards stopping all bots, or other attack vectors. That just makes the challenge too difficult for legitimate users. Start out easy and make it more difficult until you have spam levels at a somewhat manageable level, but not more.

最后,我想回到基于图像的解决方案:你不需要每次都创建一个新的图像。您可以预先创建大量(可能几千个?),然后随着时间的推移慢慢地更改这个集合。例如,每10分钟或每小时过期100个最旧的图像,并用一组新的图像替换它们。对于每个请求,从整个验证码集中随机选择一个验证码。

当然,这无法承受直接攻击,但正如前面多次提到的,大多数验证码都无法承受。不过,这足以阻止随机机器人。

我认为一个定制的验证码是你最好的选择。这种方法需要一个专门针对机器人/脚本来破解它。这种努力因素应该会减少尝试的次数。人类毕竟是懒惰的

Ajax Fancy Captcha类型的图像,除了你必须拖放基于形状识别,而不是输入字母/数字包含在图像上。

修正语法错误的验证码:

echo "Hello, world!;
for (int $i = 0; $i < 10; $i ++ {
  echo $i /*
}

括号和引号被随机移除。

机器人可以自动检查语法错误,但他们不知道如何修复它们!