概念CSRF即Cross Site Request Forgy,跨站请求伪造。
原理
- 用户浏览并登陆(存在CSRF漏洞的)信任网站A
- 网站A验证通过,给用户返回一个cookie
- 用户在未登出的情况下(cookie未过期)登陆了恶意网站B
- 网站B带上网站A的身份(cookie)对网站A发起请求(修改你的密码,购物,转账,偷窥你的个人信息等)
- A并不知道请求是B发送的,会处理该恶意请求。
通过A网站打开的B网站可以在A网站未退出的情况下携带A网站的cookie,header等信息进行请求。但不能获取cookie等内容。
防御CSRF的策略
同源检查
验证origin字段:浏览器会自动带上该字段,服务端可以通过该字段确定请求的来源域名。IE11在cors请求中不会添加该字段,通过302重定向的也不会携带。
验证referer字段:浏览器会自动带上该字段,该字段记录了http请求的来源地址。由浏览器提供,依靠浏览器来保障,部分情况下攻击者可以修改。
在请求地址中添加 token 并验证
将浏览器提供的token信息添加在请求参数中,后端验证token。(第三方网站不能获取header中的具体信息)
双重