如何使用jQuery UI Slider构建安全的验证码?

时间:2011-09-05 08:21:24

标签: jquery jquery-ui captcha salt

我想通过一个滑块为我的注册构建一个花哨且易于使用的验证码,用户可以在该滑块上证明他是一个人,而不是脚本。

到目前为止,我使用jQuery UI Slider实现了滑块,如果值为100,则会出现提交按钮。看起来很好,我对这种行为感到满意。

但是,由于JS由客户端执行,所以每个人都能够看到我的代码,并且可以通过使用脚本触发相同的操作。对于脚本,如果按钮可用,则没有区别。脚本只发布数据以提交表单,而我的slider-captcha也没用。

我简单的JS代码:

$(function() {
        $( "#slider" ).slider({
            value:0,
            min: 0,
            max: 100,
            step: 50,
            slide: function( event, ui ) {
                if(ui.value == 100){
                    $( "#amount" ).val( "human" );
                    $("#regButton").slideDown();
                } else if (ui.value == 50) {
                    $( "#amount" ).val( "nerd" );
                    $("#regButton").slideUp();
                } else {
                    $( "#amount" ).val( "script" );
                    $("#regButton").slideUp();
                }
            }
        });
        $("#regButton").hide();
        $( "#amount" ).val( "Script" );
    });

HTML:

<label for="amount" style="text-align:right;">I'm a:</label>
        <input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold; width: 197px;" />
        <div id="slider"></div>

是否有可能构建验证码保护程序?使用服务器端哈希?设置标志?什么是使用花哨的UI存档安全性的实践,以及比输入字母更多的用户体验。

我在服务器端使用Java EE和Spring MVC。如果使用滑块而不是reCaptcha,那将是件好事。


编辑:我在滑块逻辑中添加了一个哈希值。在开始时,服务器呈现具有注册开始日期的隐藏字段,服务器基于该日期构建md5-hash。是否移动了滑块,调用了一个函数,该函数读取了隐藏字段的值并构建了一个md5-hash。哈希值将被发送到服务器,并在提交注册之前与哈希的服务器值进行比较。不像文本验证码那样保存,但比没有做任何事情更有效。

我发现了这个:https://code.google.com/p/slidelock/

你怎么了?这家伙怎么建立一个“安全”滑块?他如何管理服务器端验证和SALT?破解它是否安全或者只是更昂贵的脚本?

2 个答案:

答案 0 :(得分:1)

为什么不使用现有的验证码组件而不是自己编写?

那里有很多人。我会推荐http://www.google.com/recaptcha,这是免费的,有助于图书数字化。

答案 1 :(得分:0)

跳到结论并张贴了我不应该做的事,抱歉。

我完全理解你想要定制它的愿望,特别是当它很容易做到的时候。但是我没有看到使用滑块验证码本身就存在任何错误,只要它不是保护表单/应用程序的唯一方法。我认为可以很容易地扩充它以获得唯一标识符,我认为它在易用性方面要优越得多。在我测试并研究更多之后,我计划在未来的应用程序中使用它。