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)){

// 令牌验证错误

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值