【问题标题】:alternative captcha methods替代验证码方法
【发布时间】:2009-09-19 14:32:56
【问题描述】:

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

一定有更好的方法!

我有几个想法,最好的一个似乎是向用户展示一系列图像(4-6),并要求他们根据图像的内容回答一个问题,例如:

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

(显示动物图片)“哪种动物会飞?”

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

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

【问题讨论】:

    标签: captcha


    【解决方案1】:

    虽然它有点老了,但我确实发现KittenAuth 是一种有趣(而且可能非常有效)的验证码方法。不过,demo on their contact page 似乎只有一个。

    基于纯图像的方法(与文本图像相反)的问题在于,您基本上是在阻止盲人用户使用您的网站。 KittenAuth 作者在他网站上的一个 cmets 上承认了这一点。

    作为 KittenAuth 的有趣小骑手,this page 拥有“有史以来最糟糕的 10 个验证码”,其中包括我最喜欢的一个:

    【讨论】:

    【解决方案2】:

    尝试使用问题挑战系统,其中一个简单的问题需要一个简单的认知反应。例如让用户回答以下示例问题:

    街上的三辆车可以看到另外三辆车。总共有多少辆车?

    技术还没有那么先进,以至于带宽敏感的机器人能够回答这样的问题,但这个问题很容易回答。用户必须输入 3 或 3 以验证他们是人而不是机器。您必须有足够多的问题库,以使机器人不会简单地 ping 您的网站查看要记录的问题,以便它可以返回并提供答案。

    【讨论】:

    • 您自己的验证码失败了。如果每辆车都可以看到其他三辆车,那么总共有四辆车。
    • 不,显然这 3 辆汽车一起形成了一个类似博格的集体,因此“看”为一个。如果您是我们中的一员,您就会知道这一点。
    【解决方案3】:

    我特别喜欢“哪种动物会飞”的例子。简单有效。

    但是这种东西可能会被滥用。给它一种文化偏见——或者被认为是一种文化偏见并不难。

    而且,正如austin cheney 所表明的那样,它很容易成为一种智力测试,并且您会遇到可访问性问题。

    【讨论】:

    【解决方案4】:

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

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

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

    编辑:

    另见:Practical non-image based CAPTCHA approaches?

    但问题是,如果有人故意针对您的网站,这种技术将不起作用。

    EDIT2:

    我无法提供真实示例的链接,但我blogged 提供了更多详细信息,所以这里有一些示例代码:

    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。
    • 请注意我说过不要使用标准提交按钮,而是使用带有 onclick 方法的普通按钮。如果垃圾邮件机器人确实使用 javascript,他们必须弄清楚要单击哪个按钮,假设它是一个按钮而不是带有 onclick 事件的锚 标记。
    • 即便如此,这条路线似乎只是在推迟不可避免的事情?
    • 我们一直都是.. 但是 IMO 这比用验证码让用户烦恼要好。
    • Hasen,您能否提供一个使用普通按钮的示例的链接。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多