csrf攻击的主要就是冒用用户的身份执行危险操作。
原理就是用户登录的网站A,然后在登录状态下,在同一浏览器,又访问了危险网站B(携带了A的cookie),B网站里执行了访问A网站的链接。就是相当于冒用了用户的身份执行了A网站的某些操作。
防御手段,主要就是在页面里增加随机的token。然后每个敏感操作使用post请求,并且post请求参数里都带上token,服务端验证这个token。
yii里默认就是检查csrf的。
使用方法是,在前台页面里加上_csrf参数。例如在form里增加一个隐藏的input:
<input type="hidden" name="_csrf" id='csrf' value="<?= \Yii::$app->request->csrfToken ?>">
这样表单post的时候,就带上csrf参数了。后台controller里自动检查
2021/7/21还可以验证请求的Referer,如果不是自己网站的链接,就禁止请求。