看起来我们将为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>兼容的验证码,如果可能的话。
想法吗?
我个人不喜欢验证码,它损害了可用性,并不能解决使有效用户无效的安全问题。
我更喜欢服务器端的机器人检测方法。由于您拥有有效用户(多亏了OpenID),您可以阻止那些不“行为”的用户,您只需要识别机器人的模式,并将其与典型用户的模式进行匹配,然后计算两者之间的差异。
Davies, N., Mehdi, Q., Gough, N.:使用游戏引擎和AI工具创建和可视化智能NPC http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06.pdf
Golle, P., Ducheneaut, N.:防止机器人玩在线游戏<——ACM门户
Ducheneaut, N., Moore, R.:《游戏的社交面:大型多人在线游戏中的互动模式研究》
当然,大多数引用都指向电子游戏机器人检测,但这是因为这正是我们小组题为《机器人战争》的论文的主题:
机器人识别的游戏探索。它没有出版,只是学校的一个项目。如果你感兴趣,我可以给你发邮件。事实是,即使它是基于电子游戏机器人检测,你也可以将其推广到网页上,因为用户与使用模式有关。
我非常赞同MusiGenesis的这种方法,因为我在自己的网站上也使用了这种方法,而且效果不错。看不见的CAPTCHA过程是阻止大多数脚本的一种不错的方法,但这仍然不能阻止脚本作者对您的方法进行逆向工程,并在javascript中“伪造”您正在寻找的值。
我会说最好的方法是1)建立一个用户,这样你就可以在他们不好的时候阻止他们,2)确定一种算法来检测典型模式和非典型模式的网站使用,3)相应地阻止该用户。
在我的博客上,除非有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是非法的
所有这些都可以在服务器端轻松完成;如果选项的数量足够大,并且频繁轮换,那么就很难获得所有选项,再加上永远不要每天给同一用户相同类型的内容超过一次