ThinkPHP自動令牌驗證(附實例)


一、數據表結構

user表結構如下:

id username password

二、view模板部分

/view/index.html頁面如下:

 

1

2

3

4

5

6

<form action="__URL__/edit" method="post">

 <input type="text" name="id" />

 <input type="text" name="username" />

 <input type="password" name="password" />

 <input type="submit" name="sub" value="提交" />

</form>

三、action部分:

/Controller/IndexController.class.php頁面如下:

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

 

<?php
namespace Home\Controller;
use Think\Controller;


class IndexController extends Controller {
    public function index(){
   
        $this->display();
        
        exit();
    }
    
    public function addit(){

    $User = M("User"); // 實例化User對象
    // 手動進行令牌驗證
    if (!$User->autoCheckToken($_POST)){
    dump('no');
    }else{
    dump('yes');
    } 
   
   
    }
    
}

 

 

 

thinkphp配置令牌驗證
  
功能:可以有效防止表單的遠程提交等安全防護。

   在生成的目錄中找到common/conf/config.php中添加如下配置:

 

1

2

3

'TOKEN_ON'   =>  true, //是否開啟令牌驗證

'TOKEN_NAME'  =>  'token',// 令牌驗證的表單隱藏字段名稱

'TOKEN_TYPE'  =>  'md5',//令牌驗證哈希規則


   在生成的目錄中找到common/conf文件夾中添加tags.php並寫入以下代碼:

 

 

1

2

3

 

<?php
return array(
     'view_filter' => array('Behavior\TokenBuildBehavior'),
);
 


自動令牌會向當前SESSION會話當中放上一個md5加密的字符串。並將這個字符串以隱藏域的形式插入到表單的form之前。這個字符串出現在兩個地方,一個是在SESSION當中,另一個就是在表單當中。當你提交表單后,服務器第一件事就是對比這個SESSION信息,如果正確的話,准許表單提交,否則不允許提交。

查看index.html的的源代碼會看到在表單form的結束標志之前會多了一個自動生成的隱藏域

 

1

<input type="hidden" name="token" value="eef419c3d14c9c93caa7627eedaba4a5" />


驗證令牌是否生效

 

1

2

3

if (!$User->autoCheckToken($_POST)){

// 令牌驗證錯誤

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM