2011-09-27 73 views
0

我在网上发现了这个很棒的小代码,但它似乎没有正确删除空格后比较两个字符串?我知道一些js,但这里的任何错误都超出了我的理解。希望有人会知道这个答案。Javascript验证码

注意:它似乎也基于chs的数量来验证,而不是那些chs是什么,这些数字似乎不需要匹配,只要有足够的数字即可。

组织代码是由“mama21mama”,从“http://osticket.com/forums/showthread.php?t=6489&highlight=captcha

我已经取得了一些小的个人修改,尝试修复它,下面是我的VR完成。

<script type="text/javascript"> 
    function DrawCaptcha() { 
     var a = Math.ceil(Math.random() * 9)+ ''; 
     var b = Math.ceil(Math.random() * 9)+ '';  
     var c = Math.ceil(Math.random() * 9)+ ''; 
     var d = Math.ceil(Math.random() * 9)+ ''; 
     var e = Math.ceil(Math.random() * 9)+ ''; 
     var f = Math.ceil(Math.random() * 9)+ ''; 
     var g = '10'; 
     var code = a + ' ' + b + ' ' + ' ' + c + ' ' + d + ' ' + e + ' '+ f + ' ' + g; 
     document.getElementById("txtCaptcha").value = code 
    } 
    function ValidCaptcha() { // valida los numeros ingresados 
     var str1 = removeSpaces(document.getElementById('txtCaptcha').value); 
     var str2 = removeSpaces(document.getElementById('txtInput').value); 
     if (str1 == str2){ 
      return true; } 
     else { 
      return false; } 
    } 
    function removeSpaces(string) { 
     return string.split(' ').join(''); 
    } 
    </script> 
+1

对我来说这似乎很好(输入数字,'ValidCaptcha'的结果被警告'输入的onblur'):http://jsfiddle.net/APzxv/5/ –

+1

这似乎不是一个非常安全的验证码对我来说。人们可以轻松地重写'ValidCaptcha'来返回true。希望别人会对此表示赞同,因为我不是验证码专家。 –

+0

以这种方式验证CAPTCHA客户端将意味着它很容易被绕过。相关评论:http://stackoverflow.com/questions/1998341/captcha-validation-with-javascript/1998361#1998361 – mattle

回答

8

请勿使用此代码。它没有提高安全性。

为使captcha有效,验证码的答案必须是只有服务器才知道的秘密客户端脚本不能实施验证码,因为客户端代码将必然知道答案。

此脚本不会确保您的服务器免受恶意攻击。世界上所有的JavaScript都不会阻止攻击者将一个假的形式写入你的服务器。由于验证码验证发生在客户端,因此您的服务器对于请求是否是由人类合法生成是无能为力的。

此验证码也通过将质询呈现为纯文本而忽略了这一点。任何脚本都可以从DOM读取挑战并提供正确的答案。

如果浏览器禁用JavaScript,此脚本无用。如果在控制台中键入ValidCaptcha = function() { return true; },则此脚本无用。

而不是试图推出自己的,使用reCAPTCHA。它是免费的,有一个简单的API,并为盲人用户提供内置的住宿。

+0

谢谢,我已经在这方面的工作,我能够添加我自己的reCaptcha到我的网站。它的工作现在很棒。感谢所有人的帮助:)快乐编码 –

+0

Google帐户是否必须使用reCAPTCHA? – StanE

+0

@StanE网站管理员需要[设置reCAPTCHA](https://www.google.com/recaptcha/admin),但您的访问者不需要一个。 – josh3736