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

想法吗?


当前回答

最近,我开始添加一个标签,名称和id设置为“message”。我将它设置为隐藏与CSS(显示:none)。垃圾邮件机器人看到它,填写并提交表单。服务器端,如果文本区域与id名称填写我标记为垃圾邮件。

我正在研究的另一项技术是随机生成名称和id,其中一些是垃圾邮件检查,另一些是常规字段。

这对我来说非常有效,我还没有收到任何成功的垃圾邮件。然而,我的网站的访问者却少得多:)

其他回答

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

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

=)

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

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

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

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

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

我的建议是ASCII验证码,它不使用图像,它是程序员/极客。 这是一个PHP实现http://thephppro.com/products/captcha/这是一个付费的。 有一个免费的,也是PHP实现,但我找不到一个例子-> http://www.phpclasses.org/browse/package/4544.html

我知道这些都是在PHP中,但我相信你们这些聪明的家伙构建SO可以“移植”到你最喜欢的语言。

如果您希望使用基于ascii的方法,可以考虑如何集成FIGlet。你可以制作一些自定义字体,并对每个字符进行一些字体选择随机化,以增加熵。字距调整使文本在视觉上更赏心悦目,也使机器人更难进行逆向工程。

如:

    ______           __     ____               _____          
   / __/ /____ _____/ /__  / __ \_  _____ ____/ _/ /__ _    __
  _\ \/ __/ _ `/ __/  '_/ / /_/ / |/ / -_) __/ _/ / _ \ |/|/ /
 /___/\__/\_,_/\__/_/\_\  \____/|___/\__/_/ /_//_/\___/__,__/