ThinkPHP6怎么用表单令牌验证数据来源有效性

什么是表单令牌验证

表单令牌验证是一种防止站点受到跨站点攻击(CSRF)的技术。CSRF攻击是一种利用已登录用户的身份来提交非法请求的攻击方式。攻击者构造出跨站请求伪造的页面引诱用户打开,并利用脚本自动提交表单等方式,以用户的名义完成非法操作。

可以理解为,表单令牌验证是一种验证机制,能够辨别请求的来源是否是正常用户,如果验证出请求来源异常,请求将会被拒绝。

ThinkPHP6中如何使用表单令牌验证

创建表单

1.首先,在表单中添加一个隐藏的标签,并将它的value值设置为表单令牌:

<form action="submit.php" method="POST">

<input type="hidden" name="__token__" value="__token__" />

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

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

</form>

2. 接下来,在提交表单的控制器中添加如下代码:

public function submit()

{

// 验证表单令牌

$this->validateToken();

// 其他操作

}

生成表单令牌

在ThinkPHP6中,生成表单令牌非常简单,只需要调用框架提供的方法即可。

use think\facade\Session;

// 生成表单令牌

$token = Session::token();

// 在视图中输出表单令牌

echo '<input type="hidden" name="__token__" value="' . $token . '" />';

验证表单令牌

验证表单令牌也非常简单,只需要在控制器中调用validateToken()方法即可:

use think\facade\Session;

use think\exception\HttpException;

protected function validateToken()

{

if (!Session::has('token') || empty($this->request->post('__token__')) || Session::pull('token') !== $this->request->post('__token__')) {

throw new HttpException(403, 'Invalid token');

}

}

总结

通过文章的学习,我们知道了什么是表单令牌验证,以及在ThinkPHP6中如何使用它。表单令牌验证可以有效预防站点受到CSRF等攻击,保障站点的安全性。

后端开发标签