CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。
一、浏览器的 Cookie 策略
浏览器所持有的 Cookie 分为两种:一种是“Session Cookie”,又称“临时 Cookie”;另一种是“Third-party Cookie”,也成为“本地 Cookie”。
两者的区别在于,Third-party Cookie 服务器在 Set-Cookie 时指定了 Expire 时间,只有到了 Expire 时间后 Cookie 才会失效,所以这种 Cookie 会保存在本地;而 Session Cookie 则没有指定 Expire 时间,所以浏览器关闭后,Session Cookie 就失效了。
如果浏览器从一个域的页面中,要加载另一个域的资源,由于安全问题,某些浏览器会阻止 Third-pary Cookie 的发送。
二、CSRF 的防御
1 验证码
2 Referer Check
Referer Check 在互联网中最常见的应用就是“防止图片盗链”。同理,Referer Check 也可以被用于检查请求是否来自合法的“源”。
3 Anti CSRF Token
三、CSRF 的本质
CSRF 为什么能够攻击成功?其本质原因是重要操作的所有参数都是可以被攻击者猜测到的。
在 URL 中,保持原参数不变,新增一个参数 Token。这个 Token 的值是随机的,不可预测。
Token 需要同时放在表单和 Session 中。在提交请求时,服务器只需验证表单中的 Token,与用户 Session(或 Cookie)中的 Token 是否一致,如果一致,则认为是合法请求;如果不一致,或者有一个为空,则认为请求不合法,可能发生了 CSRF 攻击。