CSRF/XSRF(Cross-Site Request Forgery),即跨站请求伪造,也被称为“One Click Attack”或者Session Riding。基本原理是通过伪装来自受信任用户的请求来利用受信任的网站。
前端知识 |前端安全之CSRF_第1张图片
×××原理:
如图所示,用户首先访问网站A,通过登录身份验证成功,网站A下发cookie保存在用户的浏览器中。用户又去访问了网站B,网站B在下发用户页面的时候会有一个引诱点击,这个引诱点击一般是一个链接,这个链接一般指向网站A的一个存在漏洞的API接口,尤其这个API接口是GET类型。当用户禁不住诱惑点击了这个引诱点击,这个点击就访问到了A网站,此时浏览器就会自动上传cookie,此时网站A对cookie进行确认,发现是合法用户,此时就会执行这个API的动作(以前微博就出现过CSRF×××,出问题的接口导致很多情况多了很多关注)。

总结
CSRF能造成×××的原理:
用户登录过网站A。
网站A中某一个接口存在着这种漏洞。这两条件缺一不可。

防御措施

1.Token验证
×××原理中访问漏洞接口的时候浏览器只上传了cookie,没有手动的上传一个token。这个token是用户登录注册甚至只是访问网站A,服务器会自动向用户本地存储一个token,在用户访问各个接口的时候,如果没带这个token,服务器就不会通过验证。所以当用户点击引诱链接,这个链接只会自动携带cookie,但是不会自动携带token,这样就能避免×××。

2.Referer验证
Referer,即页面来源。服务器通过判断页面来源是不是自己站点的页面来源,如果是就执行接口动作,如果不是一律拦截。这样也能避免×××。

3.隐藏令牌
类似于Token验证,原理是把token放在HTTP头的自定义属性中,而不是把信息放在链接上,增加了隐蔽性。本质上和Token验证没什么区别,只是用法上的一些区别。