CSRF,即跨站请求伪造(Cross-site request forgery)
攻击原理
- 用户登录受信任网站A,产生cookie
- 用户访问攻击网站B,网站B返回攻击代码并发出要登录网站A的请求
- 网站A对请求进行验证并确认是用户的cookie,误以为是用户操作
- 网站A执行攻击代码,攻击完成。
可以理解为:攻击者盗用用户身份,并以用户的名义发送恶意请求。 在服务器看来这个请求是完全合法的,导致攻击目的达到。
防御措施
CSRF的关键点是浏览器自动带上了受信任网站的Cookie访问该受信任网站的链接,这是浏览器需要的机制应用是无法阻止的。所以CSRF防范的立足点应该是,面对发过来的数据包如何识别是通过本网站点击链接发过来的数据包,还是其他网站发来的数据访问数据包。
一、验证HTTP Referer字段
在 HTTP 头中有一个字段叫 Referer,它标识了当前请求的来源页面,简单来说,谁发出了请求Referer就指向谁。浏览器访问时会自动带上cookie和Referer,这样服务器就可以通过检测Referer值来决定是否通过验证。
因此只需要在最后给所有敏感请求加一个拦截器来检查Referer的值是否来自于何处。但是这种方法也存在缺点:第一点,各浏览器的Referer实现及其安全漏洞是未知的,而Referer的实现依赖于浏览器,不排除攻击者伪造用户的Referer