Yii2.0防御csrf攻击方法
2016-07-07 00:00
543 查看
yii2中无论是用测试工具POSTMAN、用命令行CURL请求、ajax请求总是会得到http400:Bad Request的错误;而如果用Web网页方式GET访问(去除verbFilter的POST限制),是正常的
通过查阅资料发现,这是CRSF验证的原因
原理:
Cookie Hashing, 让服务器发送给客户端的所有表单中都标示一个随机值_csrf,并同时在客户端的COOKIE中保存一个相关联的token;
验证的时候,服务端每次对接收到的请求_POST()过来的一个input hidden _csrf跟客户端的COOKIE中的token进行对照验证
攻击者攻击的原理是利用了客户端的COOKIE,但是攻击者是得不到COOKIE具体的内容的,他只是利用(这里抛开XSS攻击的可能性,由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,这就另外的1%。一般的攻击者看到有需要算Hash值,基本都会放弃了);所以攻击者没法在攻击URL中加入token,这样就无法通过验证。
这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了
解决方案:
1.禁用CRSF验证(不推荐):'enableCsrfValidation' => false,
'components' => [
'request' => [
'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4',
'enableCookieValidation' => false,
'enableCsrfValidation' => false,
]
2.数据提交时,携带 csrf 信息
a.调用组件ActiveForm时,提交数据会自动带上_csrf
b.ajax提交时可以在头部获取到csrf信息(如下图),与要提交的数据一并提交即可
c.也可以通过php获取csrf信息
Yii::$app->request->csrfParam;(获取csrf-param)
Yii::$app->request->csrfToken;(获取csrf-token)
相关文章推荐
- yii2.0 加密解密处理方法
- yii2.0 模型rules验证详解
- Yii2.0 ActiveForm组件的ajax提交方法
- Yii2.0 创建一个自定义组件方法
- yii2.0静态资源js css引入方法
- Yii2.0 ArrayHelper::map() 使用方法
- Yii2.0数据库操作增删改查详解
- yii2.0 widget小部件制作教程
- yii2.0 UrlManage链接url规则解析
- yii2.0分页的基本使用及其配置详解
- 日请求亿级的QQ会员AMS平台PHP7升级实践
- phpmailer 使用
- 使用mutt和msmtp发送邮件
- ThinkPHP,连贯操作between
- PHP Date使用
- PHP 开发者该知道的 5 个 Composer 小技巧
- [转]ftp到底是什么?它是干什么的
- 激活phpstorm的链接
- PHP安装
- PHP并发IO编程之路