替代验证码方法

9

我在这里寻找灵感。我需要为我的网站使用某种人类验证,但如今最常见的方法(要求用户将图像中看到的字母和数字键入文本输入框)似乎有点垃圾 - 有时我很难弄清楚字母和数字是什么。

一定有更好的方法!

我有一些想法,最好的方法似乎是向用户显示一系列图像(4-6张),并根据图像内容提出问题,例如:

(展示一些几何形状)“哪个图像有3个边?”

或者

(展示动物图片)“哪个动物能飞?”

这有易于编程的优点,并且希望易于通过。

有人能想到其他解决这个问题的方法吗?或者可能发现上述系统的缺陷?是否可能使这样的系统对人类更容易通过,对机器人更难通过?

4个回答

3
尽管有点陈旧,但我真的觉得 KittenAuth是一种有趣(而且可能非常有效)的验证码方法。然而,他们的联系页面上只有一个演示
基于纯图像的方法(而不是文本图像)的问题在于,您基本上阻止了盲人用户使用您的网站。KittenAuth的作者在其网站的评论中承认了这一点。
作为KittenAuth的有趣小附加功能,此页面列出了“有史以来最糟糕的10个验证码”,其中包括我最喜欢的之一:

calculus captcha


只有受过良好教育的成员才能加入,这是一个整洁的方式 :) - Zed
受过良好教育的成员,或者只是会使用 Wolfram Alpha 的人(或者机器!):http://www.wolframalpha.com/input/?i=Dt[4+sin+(7x+-+pi/2),+x]++/.+x+-%3E+0 - Joren

1

尝试使用基于ajax的提交过程,通过点击普通按钮(而不是提交按钮)触发,使用jQuery非常容易。

据我所知,垃圾邮件机器人没有JavaScript。

如果您担心未启用JavaScript的用户,则无法提交表单,我认为这是完全可以的。如果他们不能信任您在网站上启用JavaScript,那么他们无法充分利用网站并不是您的错。

编辑:

另请参见:实用的非图像验证码方法?

问题在于,如果有人有目的地针对您的网站,这种技术就不起作用了。

编辑2:

我无法提供真实示例的链接,但我写了一篇博客文章详细介绍了它,因此这里是一些示例代码:

function submit_form()
{
    jQuery.ajax({
      "type": "POST", // or GET
      "url": 'action_url', // The url you wish to send the data to, the url you'd put in the "action" attribute on the form tag
      "data": jQuery("form#the-form").serialize(), // The data you'll send. You need to get the form somehow. Easiest way is to give it an id.
      "dataType": "json", // Only put this if the server sends the response in json format
      "success": function(data, textStatus) // server responded with http status 200
        {
            // This is the happy case: server response has arrived
        },
      "error": function(req, textStatus, errorThrown) // maybe HTTP 404 or HTTP 500
        {
            // something went wrong, the response didn't go through or the response didn't come. Handle the situation: let the user know, or something.
        },
      "complete": function(req, textStatus) // This one always gets called anyway
        {
            // cleanup after yourself
        }   // XXX careful: if you put a comma here, IE6 will fail
      });
}

这可能是目前的情况,但我认为垃圾邮件机器人很快就能够使用Javascript。有几个库使得脚本解析和执行Javascript变得非常容易。 - Jimmy Stenke
注意,我说过不要使用标准的提交按钮,而是使用带有onclick方法的普通按钮。如果垃圾邮件机器人确实使用了JavaScript,它们必须弄清楚要点击哪个按钮,假设它是一个按钮,而不是带有onclick事件的锚<a>标记。 - hasen
即便如此,似乎我们采取这种方式只是在拖延不可避免的结果? - alphthethird
我们总是……但在我看来,这比用验证码烦扰用户要好。 - hasen
Hasen,你能提供一个使用普通按钮的示例链接吗?谢谢。 - Picflight
使用普通按钮的问题在于回车键无法提交表单,在许多情况下这可能会令用户感到烦恼。 - Simon East

1
尝试使用问题挑战系统,其中简单的问题需要简单的认知响应。例如,要求用户回答以下示例问题:
街上有三辆车可以看到另外三辆车。总共有多少辆车?
技术还没有那么先进,以至于带宽敏感的机器人能够回答这样的问题,然而这个问题很容易回答。用户必须输入三或3来验证他们是人而不是机器。您必须拥有足够大的问题库,以便机器人不会只是访问您的网站并记录问题,以便它可以带着答案返回。

3
你刚刚没通过验证码。如果每辆车能看到其他三辆车,那么总共有四辆车。 - SquareCog
不,显然这3辆车在一起形成了类似博格集体的存在,因此它们“看”作为一个整体。如果你也是我们中的一员,就应该知道这个。 - D'Arcy Rittich

1
我特别喜欢“哪种动物会飞”的例子。简单而有效。
但是这种东西可能被滥用。很容易给它加入文化偏见,或者被认为有文化偏见。
正如austin cheney所展示的那样,它很容易变成一种智力测试,并且会带来无障碍问题。

1
我想指出,在SquareCog的评论之前,我的回答已经给出了。我是在提到austin将“简单认知反应”称为“智力测试”,并没有别的意思。 - pavium

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接