PHP token驗證規則

來源:互聯網
上載者:User

標籤:iss   ova   mic   class   keyword   x11   views   相對   span   

PHP在控制器中怎麼添加token驗證

 

//獲得token      private  function  getToken(){          $tokenName   = C( ‘TOKEN_NAME‘ ,null, ‘__hash__‘ );          $tokenType   = C( ‘TOKEN_TYPE‘ ,null, ‘md5‘ );          if (!isset( $_SESSION [ $tokenName ])) {              $_SESSION [ $tokenName ]  =  array ();          }          // 標識當前頁面唯一性          $tokenKey    =  md5( $_SERVER [ ‘REQUEST_URI‘ ]);          if (isset( $_SESSION [ $tokenName ][ $tokenKey ])) { // 相同頁面不重複產生session              $tokenValue  $_SESSION [ $tokenName ][ $tokenKey ];          } else {              $tokenValue  is_callable ( $tokenType ) ?  $tokenType (microtime(true)) : md5(microtime(true));                          $_SESSION [ $tokenName ][ $tokenKey ]   =   $tokenValue ;              if (IS_AJAX && C( ‘TOKEN_RESET‘ ,null,true))                  header( $tokenName . ‘: ‘ . $tokenKey . ‘_‘ . $tokenValue );  //ajax需要獲得這個header並替換頁面中meta中的token值          }          return  array ( $tokenName , $tokenKey , $tokenValue );       }

  

PHP表單增加token驗證,防止站外提交/重複提交/雙擊提交

 

 

 

<?php@session_start();if($_POST) {    if ($_POST[‘privatetoken‘] == $_SESSION[‘token‘]) {        unset($_SESSION[‘token‘]);        echo ‘合法提交‘;    } else {        echo ‘novalite‘;    }}$token=md5(getrandcode());$_SESSION[‘token‘] = $token;function  getrandcode(){    $str =array(1,2,3,4,5,6,7,8,9,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘);    $res=‘‘;    for($i=0;$i<4;$i++){        $rand=mt_rand(1,16);        $res .=$str[$rand];    }    return  $res;}?><!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <title>form</title></head><body><form action="form.php" method="post">    url:<input type="text"   name="urlist" />    <input type="hidden" name="privatetoken" value="<?php echo $token;?>" />    <br />    <input type="submit" value="tijiao" /></form></body></html>-------------------------------------------表單被類比的話 session是不會重建的-session
Token,就是令牌,最大的特點就是隨機性,不可預測。一般駭客或軟體無法猜測出來。

那麼,Token有什麼作用?又是什麼原理呢?

Token一般用在兩個地方——防止表單重複提交、anti csrf攻擊(跨網站請求偽造)。

兩者在原理上都是通過session token來實現的。當用戶端請求頁面時,伺服器會產生一個隨機數Token,並且將Token放置到session當中,然後將Token發給用戶端(一般通過構造hidden表單)。下次用戶端提交請求時,Token會隨著表單一起提交到伺服器端。

然後,如果應用於“anti csrf攻擊”,則伺服器端會對Token值進行驗證,判斷是否和session中的Token值相等,若相等,則可以證明請求有效,不是偽造的。

不過,如果應用於“防止表單重複提交”,伺服器端第一次驗證相同過後,會將澀session中的Token值更新下,若使用者重複提交,第二次的驗證判斷將失敗,因為使用者提交的表單中的Token沒變,但伺服器端session中Token已經改變了。

上面的session應用相對安全,但也叫繁瑣,同時當多頁面多請求時,必須採用多Token同時產生的方法,這樣佔用更多資源,執行效率會降低。因此,也可用cookie儲存驗證資訊的方法來代替session Token。比如,應對“重複提交”時,當第一次提交後便把已經提交的資訊寫到cookie中,當第二次提交時,由於cookie已經有提交記錄,因此第二次提交會失敗。

不過,cookie儲存有個致命弱點,如果cookie被劫持(xss攻擊很容易得到使用者cookie),那麼又一次gameover。駭客將直接實現csrf攻擊。
[php] view plain copy  print?
  1. <?php  
  2. /* 
  3. * PHP簡單利用token防止表單重複提交 
  4. * 此處理方法純粹是為了給初學者參考 
  5. */  
  6. session_start();  
  7. function set_token() {  
  8.     $_SESSION[‘token‘] = md5(microtime(true));  
  9. }  
  10. function valid_token() {  
  11.     $return = $_REQUEST[‘token‘] === $_SESSION[‘token‘] ? true : false;  
  12.     set_token();  
  13.     return $return;  
  14. }  
  15. //如果token為空白則產生一個token  
  16. if(!isset($_SESSION[‘token‘]) || $_SESSION[‘token‘]==‘‘) {  
  17.     set_token();  
  18. }  
  19. if(isset($_POST[‘test‘])){  
  20.     if(!valid_token()){  
  21.         echo "token error";  
  22.     }else{  
  23.         echo ‘成功提交,Value:‘.$_POST[‘test‘];  
  24.     }  
  25. }  
  26. ?>  
  27. <form method="post" action="">  
  28.     <input type="hidden" name="token" value="<?php echo $_SESSION[‘token‘]?>">  
  29.     <input type="text" name="test" value="Default">  
  30.     <input type="submit" value="提交" />  
  31. </form>  

PHP token驗證規則

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.