CSRF
是什么?cross site request forgery,跨站点伪造请求。
先了解现在浏览器的cookie策略:
浏览器有两种cookie
1、session cookie ,临时cookie。无expire时间,保存在浏览器进程的内存空间里
2、第三方cookie 也叫本地cookie。保存在本地,有expire时间
浏览器的session cookie在不同tab间是有效的,而本地cookie会遵循同源策略
CSRF就是利用用户的cookie,默默的伪造请求达到破坏。
这些请求不管是get还是post。都是可以伪造的。鹅厂里所有的写操作都要求只接受post方法,这也只是为了适当提高攻击门槛而已,不是决定性的。还需要更多手段
有的CSRF攻击,并不需要有xss漏洞,可能就是一些正在功能,被伪造请求组合起来就能达到目的。
或者是一个后台参数验证不够严谨,这对于经常做营销活动的后台同学再熟悉不过了。
CSRF防御手法
1、图片验证码 由于后台验证要是人为操作,至少是用户亲手做的,让攻击者默默伪造请求的门槛提高不少。但是这个交互体验不好,一般就用在安全性要求高一点的场合,例如支付、注册等
2、reference check 。如果知道某个请求只可能来自某个页面,那就可以直接校验这个请求的refer。缺陷在于服务器拿到refer这个事情保证不了。监控的意义大于防御的作用
3、token 检查
CSRF成功的原因是,攻击者可以提前猜中请求需要的所有参数,才能伪造。
所有参数里增加一个随机的token,这让攻击者无法伪造这个参数,至少不能提前给出一个对很多用户都行之有效的token。
token校验还能防御jsonhijacking
http://drops.wooyun.org/papers/42
目前鹅厂是用cookie里的值再hash出一个数字来。这样服务器根据cookie去验证token是否正常。
通常都是建议token放到post的表单参数里。而鹅厂这么大一个平台为了防御措施的圆满执行,选择放到url里。功效其实差不多。
安全性还是在于信赖cookie,守住cookie才是重点。当有平台上的xss漏洞的时候,csrf的防御也就失效了。
在xss背景下做csrf攻击,有个概念叫xsrf,有区别。
所以XSS的问题还是的XSS的防御,和CSRF防御体系是相辅相成,缺一不可。
通过这一章节的学习,得到更多概念上以正视听。
私自以为如果说防御xss要考验必备的转义、过滤、cookie安全知识。
那么csrf防御考得是后台开发的慎密,参数验证,信任机制、逻辑设计等方面捍卫安全利益。
还记得入职培训里很经典的一句话:后端不要相信前端