一、数据表结构
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 |
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)){ // 令牌验证错误 } |