用途

  1. 有效方式防止重复提交,
  2. 以及跨站伪造请求(anti csrf)

特点

  1. 随机性
  2. 不可预测

原理

原理上都是通过session token来实现的。

当客户端请求页面时,服务器会生成一个随机数Token,并且将Token放置到session当中,然后将Token发给客户端(一般通过构造hidden表单)。

下次客户端提交请求时,Token会随着表单一起提交到服务器端。
然后,如果应用于“anti csrf攻击”,则服务器端会对Token值进行验证,判断是否和session中的Token值相等,若相等,则可以证明请求有效,不是伪造的。

用法

在表单中添加

<input type="hidden" name="__hash__" value="{$Request.token}" />
或者
{:token()}

在验证器中添加规则,验证是否符合

protected $rule = [
    '__token__'  =>  'require|token',
];
protected $message = [
    '__token__.require' => '非法提交',
    '__token__.token'   => '请不要重复提交表单'
];

因为数据表中没有__hash__字段,要删除表单提交过来中数据中的__hash__字段

控制器中使用自动逸令牌规则,调用Request

$token = $this->request->token('__token__', 'sha1');
$this->assign('token', $token);
最后编辑:2020年02月23日

发表评论

正在加载 Emoji