Web安全開發之驗證碼設計不當引發的撞庫問題

來源:互聯網
上載者:User

標籤:this   random   art   抓包   doctype   web安全   session   自動   invalid   

  感謝某電商平台安全工程師feiyu跟我一起討論這個漏洞的修複。以往在安全性測試的過程中後台經常存在驗證碼不失效果造成的撞庫問題,甚至在一些銀行或者電商的登入與查存頁面同樣存在這個問題,一旦造成撞庫無論對使用者帳號的安全性還是網站的負載都是巨大的挑戰。其實造成問題的原因並不複雜,主要是研發在開發過程中缺少對安全的認知,造成的疏忽。 

今天心血來潮自己寫了個驗證碼來類比下出現的問題,首先我們從前端頁面開始分析:

<!DOCTYPE html><html>  <head>   <meta chartset="utf-8">  </head>  <body>     <form method="post"  action="form.php">       <p>驗證碼圖片:<img border="1" id="capthcha_img" onclick="this.src=‘captcha.php?r=‘+Math.random()" src="captcha.php?r="<?php echo rand();?> width="100" height="30"  /> <a href="javascript:void(0)" onclick="document.getElementById(‘capthcha_img‘).src=‘captcha.php?r=‘+Math.random()">換一個</a></p>       <p>輸入內容:<input type="text" name="autocode" value="" /></p>    <p><input type="submit"  value="提交" style="padding:6px 20px;"/></p>     </form>  </body></html>

  可以看出驗證碼是通過captacha.php來產生。

  我們節選captacha.php的關鍵區段來分析:

$_SESSION[‘authcode‘]=$captch_code;

  我們把產生的captch_code以文字形式存在一個臨時的session中。

  並在前端表單提交後,在form.php中驗證POST的驗證碼是否與Session中的值一致。

<?php   if(isset($_REQUEST[‘autocode‘])){      session_start();      if(strtolower($_POST[‘autocode‘]) == $_SESSION[‘authcode‘]){       echo ‘right‘;      }else{      echo‘wrong‘;      }   exit();   }?>

  萬事俱備,似乎一切都很完美,一個驗證碼(機器自動化識別不在本次討論範圍內,TT)。

  

  輸入正確返回right:

  

  輸入錯誤範圍wrong:

  

  好了,漏洞來了。我們放到burpsuite中愉快的玩耍一下,在提交驗證碼的過程中抓包、截斷、重放一下資料包:

 

無限重放驗證碼它就是不失效。

怎麼修,這問題愁死我了,想了好久,終於有了點眉目。

其實很早以前我們寫測試報告都說應該讓存有驗證碼Session在合適的時間失效,問題是如何?。考慮了一下,可以通過以下方法處理:

<?php   if(isset($_REQUEST[‘autocode‘])){      session_start();  if($_SESSION[‘authcode‘] ==‘NULL‘){              \\通過驗證碼是否為空白檢測驗證碼是否被提交過   echo‘Invalid expired‘;      }elseif(strtolower($_POST[‘autocode‘]) == $_SESSION[‘authcode‘]){       echo ‘right‘;      }else{      echo‘wrong‘;      }  $_SESSION[‘authcode‘]=‘NULL‘;  \\發起一次form提交後把session值置空   exit();   }?>                        

  效果如下:

  

  如有不正確,歡迎大家指正。謝謝

 

 

 

 

 

 

 

  

   

Web安全開發之驗證碼設計不當引發的撞庫問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.