CSRF攻击原理及应对策略

攻击原理

用户A登录网站B,并存储了cookie。用户A进入恶性网站C时,网站C向网站B的后端发起请求。网站B查看到该浏览器中存在登录cookie,所以允许了操作。整个过程,恶性网站C利用服务端只判断发起请求的浏览器是否存在特定cookie的漏洞, 假装自己是B网站发起的请求。

应对策略一:直接判断请求域

第一个想起的方法就是,直接判断请求域,查了资料之后发现这确实是首推的方法。通过获取header的referer,判断是否来自于某个特定的域。这样可以从根本上防止这种假冒的攻击。但是如果域名变迁什么的,这里也得跟着改来改去的, 想想也挺麻烦的。一直跟进一个项目还好,如果项目多加上人员流动,一旦有变更这就是个头疼的问题了。紧接着,我有查了一下另一个问题,就是referer是否能被伪造。结果是肯定的,referer是能被伪造的。所以这个方法看似一劳永逸,还是有 不少坑的

在请求地址中添加 token 并验证。

在请求地址中添加 token 并验证。说白了,就是请求的时候添加一个自定义的验证参数。看Django 中有一步专门针对scrf攻击的操作。每个请求都会默认添加上一个scrf参数,cookie中也有一个scrf参数。推测它的原理应该是,后端并没有判断cookie中的scrf,cookie中的scrf只是 用来协助前端生成一个scrf的参数,服务端接受这个scrf参数之后判断是否正确。这样第三方网站模拟提交的数据中是没有scrf这个参数的,或者就算有,生成规则也不对,所以可以有效的防止攻击

随机浏览