CSRF:Cross Site Request Forgy(跨站请求伪造)
用户打开另外一个网站,可以对本网站进行操作或攻击。容易产生传播蠕虫。
CSRF攻击原理:
1、用户先登录A网站
2、A网站确认身份返回用户信息
3、B网站冒充用户信息而不是直接获取用户信息,从B网站页面向A网站发起请求(携带A网站身份)
CSRF危害:
利用用户登录态
用户不知情
完成业务请求
盗取用户资金
冒充用户发帖
损坏网站名誉等等
如何防御CSRF:
原理步骤3具体细节:
(1)B网站向A网站请求
(2)带A网站Cookies
(3)不访问A网站前端
(4)referer为B网站
通过这些细节特征我们可以制定以下防御策略:
1、禁止第三方网站带Cookies,cookies中新增了same-site属性可禁止,缺点是浏览器兼容性。
2、在A网站前端加入验证信息,只有访问A网站获得验证信息才能正确发送请求。如验证码,token。
token防御的关键是cookies和表单或者页面中都要存储token值,cookie的值和页面的值需要做比对。
初级做法有个弊端,只有最后一个页签的token可以使用,前面打开的页签token会失效。
解决token失效问题可以给token设置有效时长存储多个token,过期token提示用户刷新页面从而获取新token。
3、验证referer,禁止来自第三方网站的请求。验证时需要代码严格验证,不然可以使用带参数来绕过非严格验证的判断。