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

想法吗?


当前回答

虽然类似的讨论开始了:

我们正在一个经常进行数据挖掘的应用程序上尝试这个解决方案:

一个更好的验证码控制(看妈-没有图像!)

你可以在我们的建筑检查搜索中看到它的作用。

您可以查看Source并看到CAPTCHA只是HTML。

其他回答

我个人不喜欢验证码,它损害了可用性,并不能解决使有效用户无效的安全问题。

我更喜欢服务器端的机器人检测方法。由于您拥有有效用户(多亏了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)相应地阻止该用户。

你是否打算为Stackoverflow提供一个API,允许以编程方式操纵问题/答案?如果是这样,基于CAPTCHA的保护将如何适应这种情况?

虽然通过Atom聚合提要提供了一个丰富的只读接口,但它允许人们创建一些有趣的智能客户端/工具,用于组织和搜索Stackoverflow的大量内容;我认为在网页界面之外拥有提问和/或回答问题以及对内容投票的功能是非常有用的。(尽管这可能不符合基于广告的收入模式。)

我更愿意看到Stackoverflow使用启发式监控方法,试图检测恶意活动并阻止违规用户,但我可以理解使用CAPTCHA可能是一种更简单的方法,因为您的发布数据即将发布。

不是最精致的反垃圾邮件武器,但是微软支持:

Nobot-Control (AjaxControlToolkit的一部分)。

NoBot可以通过违反上述任何技术进行测试:快速回发、多次回发或禁用浏览器中的JavaScript。

演示:

http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx

在我的博客上,除非有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是非法的

所有这些都可以在服务器端轻松完成;如果选项的数量足够大,并且频繁轮换,那么就很难获得所有选项,再加上永远不要每天给同一用户相同类型的内容超过一次

修正语法错误的验证码:

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

括号和引号被随机移除。

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