看起来我们将为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>兼容的验证码,如果可能的话。
想法吗?
在我的博客上,除非有javascript,否则我不接受评论,而是通过ajax发布评论。它把所有的机器人挡在外面。我收到的唯一垃圾邮件来自人类垃圾邮件发送者(他们通常从站点复制并粘贴一些文本来生成评论)。
如果你必须要有一个非javascript版本,可以这样做:
下面字符串[y]中[x]的[某些操作]
给定一个足够复杂的[x]和[y],无法用正则表达式求解,那么编写解析器就很难了
数一下[dog,dangerous,danceable,cat]中短单词的个数= 2
在[dog,dangerous,danceable,catastrophe] = dog中最短的单词是什么
哪个单词以x结尾,[fish,mealy,box,stackoverflow] = box
在[apple.com, stackoverflow.com, fish oil.com] = fish oil.com中,哪个url是非法的
所有这些都可以在服务器端轻松完成;如果选项的数量足够大,并且频繁轮换,那么就很难获得所有选项,再加上永远不要每天给同一用户相同类型的内容超过一次
一种选择是带外通信;服务器可以向用户发送即时消息(或短信?),然后他/她必须在验证码字段中输入该消息。
这给用户带来了一个“非此即彼”的要求——要么你必须启用JavaScript,要么你必须登录到你所选择的IM服务。虽然它可能不像上面的一些其他解决方案那么灵活,但它适用于绝大多数用户。
那些拥有编辑权限的人,可以随意添加优点/缺点,而不是单独提交回复。
优点:
可访问:许多IM客户端支持读取传入消息。一些基于web的客户端将与屏幕阅读器一起工作。
缺点:
javascript禁用的用户现在依赖于OpenID之上的另一个服务的正常运行时间。
机器人将导致额外的服务器资源使用(发送带外通信),除非实现额外的保护