一、數據表結構
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)){ // 令牌驗證錯誤 } |
