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

想法吗?


当前回答

将一个数学问题发布为IMAGE,为了清晰起见,可能会使用附图。

只是图像中清晰可见的文本。

(2+5)*2

其他回答

有人还建议使用Raphael JavaScript库,它显然可以让你在所有流行的浏览器的客户端上作画:

http://dmitry.baranovskiy.com/raphael/

.. 但这并不完全适用于我的<noscript>情况,不是吗?:)

虽然我们都应该知道基本的数学,但这个数学难题可能会引起一些困惑。在你的例子中,我相信有些人会回答“8”而不是“1”。

用粗体或斜体突出显示随机字符的简单文本字符串是否合适?用户只需要输入粗体/斜体字母作为验证码。

例如ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh

在这种情况下,“堆栈”将是验证码。 显然,这个观点有很多不同的版本。

编辑:解决与此想法相关的一些潜在问题的示例变体:

使用随机颜色的字母代替粗体/斜体。 使用每秒钟红色字母作为验证码(减少机器人识别不同格式的字母来猜测验证码的可能性)

验证码检查你是人还是电脑。 问题是,在那之后,计算机需要判断你是否是人类。

因此,一个解决方案是让一个用户填写CAPTCHA,让下一个用户检查它。 问题当然是时间差距。

简单的文字听起来很棒。贿赂社区来做这项工作!如果您像我一样相信,SO代表积分可以衡量用户帮助网站成功的承诺,那么提供声誉积分来帮助网站免受垃圾邮件发送者的侵害是完全合理的。

Offer +10 reputation for each contribution of a simple question and a set of correct answers. The question should suitably far away (edit distance) from all existing questions, and the reputation (and the question) should gradually disappear if people can't answer it. Let's say if the failure rate on correct answers is more than 20%, then the submitter loses one reputation point per incorrect answer, up to a maximum of 15. So if you submit a bad question, you get +10 now but eventually you will net -5. Or maybe it makes sense to ask a sample of users to vote on whether the captcha questionis a good one.

最后,就像每日信誉上限一样,假设没有用户可以通过提交验证码问题获得超过100个声誉。这是对此类贡献的权重的合理限制,也有助于防止垃圾邮件发送者在系统中植入问题。例如,你可以选择与提交者的声誉成比例的概率而不是相等概率的问题。乔恩·斯基特,请不要提交任何问题。

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