yii2开启CSRF后POST"提交的数据无法被验证"
原创 2019-06-16
CSRF全称Cross-site request forgery,即跨站请求伪造。利用CSRF,攻击者可以破坏网络请求会话的完整性。
CSRF全称Cross-site request forgery,即跨站请求伪造。利用CSRF,攻击者可以破坏网络请求会话的完整性。比如如果在一个Web页面中存在js ajax的请求,为了网站安全,你应该仅允许这个ajax请求在当前web页面内发起。否则的话,用户可以通过模拟该ajax请求的方式发起攻击。
防御CSRF攻击的方式主要有验证token,Referer,header等。yii2框架采用的验证token的方式,当开启CSRF校验之后,会在Web请求Cookie中生成CSRF token信息。
yii2中开启CSRF校验
yii2中默认开启了CSRF校验,如果全局关闭后,可以在指定Controller中开启:
public $enableCsrfValidation = true;
您提交的数据无法被验证
开启CSRF校验后,很可能在ajax的POST请求中出现“400错误:您提交的数据无法被验证”,可以通过以下方式处理。
1,使用ActiveForm包裹输入组件
<?php $form = ActiveForm::begin(['id' => 'search-form']); ?>
//...
<?php ActiveForm::end(); ?>
默认会增加一个隐藏的input携带csrf
信息。
2,Ajax请求
最新版本的Yii2,在模版文件中通过以下方式生成csrftoken:
<?php $this->registerCsrfMetaTags() ?>
Ajax请求默认会增加X-CSRF-Token
的header,不再需要在请求参数中增加csrfToken。
var csrfParam = yii.getCsrfParam()//获取csrf key
var csrfToken = yii.getCsrfToken()//获取csrf token值
相关文章:
发表留言
您的电子邮箱地址不会被公开,必填项已用*标注。
留言板