2011-09-27 72 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