php为表单生成令牌,ThinkPHP6.0表单令牌 - ThinkPHP6.0快速开发手册(案例版) - php中文网手册...

简单易用的表单令牌

表单令牌可以提升表单验证的易用和安全性

表单令牌可以提升表单验证的易用和安全性

添加令牌Token验证

验证规则支持对表单的令牌验证,首先需要在你的表单里面增加下面隐藏域:

也可以直接使用{:token_field()}

默认的令牌Token名称是__token__,如果需要自定义名称及令牌生成规则可以使用{:token_field('__hash__', 'md5')}

第二个参数表示token的生成规则,也可以使用闭包。

如果你没有使用默认的模板引擎,则需要自己生成表单隐藏域namespace app\controller;

use think\Request;

use think\facade\View;

class Index

{

public function index(Request $request)

{

$token = $request->buildToken('__token__', 'sha1');

View::assign('token', $token);

return View::fetch();

}

}

然后在模板表单中使用:

AJAX提交

如果是AJAX提交的表单,可以将token设置在meta中

或者直接使用{:token_meta()}

然后在全局Ajax中使用这种方式设置X-CSRF-Token请求头并提交:$.ajaxSetup({

headers: {

'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

}

});

路由验证

然后在路由规则定义中,使用Route::post('blog/save','blog/save')->token();

如果自定义了token名称,需要改成Route::post('blog/save','blog/save')->token('__hash__');

令牌检测如果不通过,会抛出think\exception\ValidateException异常。

控制器验证

如果没有使用路由定义,可以在控制器里面手动进行令牌验证namespace app\controller;

use think\exception\ValidateException;

use think\Request;

class Index

{

public function index(Request $request)

{

$check = $request->checkToken('__token__');

if(false === $check) {

throw new ValidateException('invalid token');

}

// ...

}

}

提交数据默认获取post数据,支持指定数据进行Token验证。namespace app\controller;

use think\exception\ValidateException;

use think\Request;

class Index

{

public function index(Request $request)

{

$check = $request->checkToken('__token__', $request->param());

if(false === $check) {

throw new ValidateException('invalid token');

}

// ...

}

}

使用验证器验证

在你的验证规则中,添加token验证规则即可,例如,如果使用的是验证器的话,可以改为:protected $rule = [

'name'  =>  'require|max:25|token',

'email' =>  'email',

];

如果你的令牌名称不是__token__(假设是__hash__),验证器中需要改为:protected $rule = [

'name'  =>  'require|max:25|token:__hash__',

'email' =>  'email',

]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值