CSRF(Cross—Site Request Forgery)跨站点请求伪造,主要是利用浏览器端未过期的cookie信息伪造身份通过服务器的身份验证。
一、示例
现在有一个存在CSRF漏洞的网站A,攻击者的网站B,用户User
- 用户打开浏览器访问网站A,登录用户密码;
- 网站A返回用户的cookie信息,保存到用户浏览器;
- 用户未退出网站A之前,打开一个Tab页面,访问攻击者网站B;
- 攻击者返回一段代码,这段代码将会在用户浏览器自动执行并向刚刚的网站A发起一个请求;
- 由于浏览器请求会自动携带上cookie,A网站直接使用cookie通过身份验证,攻击者完成身份伪造。
二、防御
- 验证 referrer(同源策略)
(1)原理: referrer 字段记录的是请求是从哪个网站发送来的,由浏览器生成,新版浏览器一般无法自己伪造。攻击者只能在他自己的网站里边发起请求,浏览器自动带上的referrer是攻击者的网址。服务器只要检测referer是不是自己信任的网站即可。
(2)缺陷:
a. 部分旧版浏览器发现其referrer可以被篡改
b. 用户可能由于维护隐私要求浏览器不自动携带referrer字段,这可能会导致一些合法用户的合法请求被服务器拒绝