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']); ?>
//...
2,直接在ajax请求中添加_csrf参数
var csrf = '=Yii::$app->request->getCsrfToken()?>'
$.ajax({
type: 'POST',
url: url,
data: {_csrf: csrf}
...
})
关闭Cookie后,CSRF验证将失效
由于yii2的CSRF验证机制需要依赖Cookie,如果用户浏览器关闭Cookie,则功能失效。目前没有很好的方式处理这种问题。
其它文章