2012-12-19 78 views
1

我正在嘗試使用表格集成驗證碼。我擁有的是一個基本格式,我能夠在自己的PHP頁面上獲得驗證碼部分。此外,我能夠在自己的PHP頁面中顯示一個表單。我遇到的問題是我不知道如何讓兩個零件一起工作。將表格集成驗證碼

這是什麼,我有一個snipit:

<?php 
session_start(); 
    if (isset($_POST['captcha'])) { 
     $_SESSION['captcha'] = rand(0, 99999999999); 
     } else { 
      if ($_SESSION['captcha']!==$_POST['captcha']) { 
      echo 're-enter a new captcha!'; 
      $_SESSION['captcha'] = rand(0, 99999999999); 
     } 
    } 
?> 

    <form action="formx.php" method="POST"> 
      <ul> 
       <li> 
        Username:<br> 
        <input type"text" name="username"> 
       </li> 
       <li> 
        Password:<br> 
        <input type="password" name="password"> 
       </li> 
       <li> 
        Password again:<br> 
        <input type="password" name="password2"> 
       </li> 
       <li> 
        Email:<br> 
        <input type="text" name="email"> 
       </li> 
       <li> 
        <input type="submit" name="captcha" value="submit"> 
       </li> 
      </ul> 
    </form> 

回答

0

如果你走過它,你可能錯過了幾個步驟:

if ($_SERVER['REQUEST_METHOD']!='POST') //If initial load, load up captcha into session 
    $_SESSION['captcha'] = rand(0,9999999999); 
else{//Means form was submitted 
    if (isset($_POST['captcha'])) {//Check if they entered 
     if ($_SESSION['captcha']!==$_POST['captcha']) {//check if ! correct, reissue new captcha 
      echo 're-enter a new captcha!'; 
      $_SESSION['captcha'] = rand(0, 99999999999); 
     }else{ 
      //Everything was good, handle data 
     } 
    }else{//Nothing was entered, give them new captcha 
     echo 'please enter the captcha!'; 
     $_SESSION['captcha'] = rand(0, 99999999999); 
    } 

} 

現在棘手的問題來當您打開這個給用戶。如果你把:

<li> 
    Please type <?=$_SESSION['captcha']?>:<br/> 
    <input type="submit" name="captcha" value="submit"> 
</li> 

機器人將能夠繞過這一點。所以你需要弄清楚如何克服這個問題。簡單地顯示號碼並告訴他們進入是很好的,並會阻止非常基本的機器人。混淆它(<span>1</span><span>2</span>)可能會使它更難一點,但機器人仍然可以解析它並繞過它。將它保存爲一個Javascript變量,然後檢查它可能也有效,但是如果機器人足夠聰明,可以繞過它。一個iframe可以工作,一個圖像可能工作,用戶代理解析可能會有所幫助,等等等等。所有這些都可以工作,但是它取決於你如何實現它,以及你想要它的安全程度。

就我個人而言,雖然我是Recaptcha的粉絲,因爲它通常很容易實現,並且需要最少的編碼。我也使用GD和TrueType庫來製作驗證碼圖像,但是如果您可以使用Recaptcha,這確實需要更多的編程。最後,我喜歡在加載頁面之後加載的Javascript數學問題,這些機器人加載時間較長並且要弄清楚發生了什麼。

畢竟說完了,做任何你想做的事。如果您遇到問題,請發佈您的代碼,我們可以幫助您解決問題。

+0

感謝您的反饋。我確實有另外一個頁面產生噪音並且產生一個隨機數。我通過使用GD庫完成了這個工作。我會研究reCaptcha,看看我能否將它集成到我的代碼中 –

0

你必須檢查與先前驗證碼新頁面提交..所以請在指定會話老varaible舊的價值$ _SESSION [「oldCaptcha」] ..所以你的代碼應該是,

session_start(); 
if (isset($_POST['captcha'])) { 
    if($_SESSION['oldCaptcha'] == $_POST['captcha']) { 
     echo 'Captcha is Successfully Matched'; 
    } 
    else { 
     $_SESSION['oldCaptcha'] = rand(0, 99999999999); 
    }   
} 

如果你的答案來insde其他循環再使用$ _SESSION [ 'oldCaptcha']的形式來顯示用戶輸入...

0

試試這個

if($_SERVER['REQUEST_METHOD']=="POST"){ 
    if ($_POST['capt'] == $_SESSION['captcha']){ 
     echo "Sucsess"; 
     $capt= rand(0, 99999999999); 
     $_SESSION['captcha'] =$capt; 
    }else{ 
     echo "Fail"; 
    } 
}else{ 
    $capt=''; 
    $capt= rand(0, 99999999999); 
    $_SESSION['captcha'] =$capt; 
}  

?> 

    <form action="" method="post"> 
      <ul> 
       <li> 
        Username:<br> 
        <input type="text" name="username"> 
       </li> 
       <li> 
        Password:<br> 
        <input type="password" name="password"> 
       </li> 
       <li> 
        Password again:<br> 
        <input type="password" name="password2"> 
       </li> 
       <li> 
        Email:<br> 
        <input type="text" name="email"> 
       </li> 
       <li> 
        Captcha:<br> 
        <input type="text" name="capt" > 
        <?php echo "Captcha : " .$capt ; ?> 
       </li> 
       <li> 
        <input type="submit" name="captcha" value="submit"> 
       </li> 
      </ul> 
    </form>