CSRF(Cross-site request forgery)跨站请求伪造,是一种对网站的恶意利用。
CSRF 与 XSS 的区别
XSS:本质是通过脚本注入的到目标网站(一下全部使用 正经.com 举例),诱骗用户点击 DOM,触发脚本执行,从而盗取用户 cookie。关键字:身份复制。
CSRF:需要搭建另外一个网站(有毒.com),然后在其他页面引诱用户访问"有毒.com", 在"有毒.com"内部,会有例如不可见的 Form 表单,或者img 标签,地址都指向"正经.com"的API。只要打开"有毒.com",就会触发网络请求,实现 CSRF。关键字:借刀杀人。
常用防御方法
浏览器请求页面时,由服务器在 cookie 中写入 csrfToken 返回给用户。
浏览器发送关键请求时,请求头中带上 csrfToken 交给服务器校验。
如果校验通过则执行正常的业务逻辑。
有毒.com 因为不知道 csrfToken,自然也就无法发送恶意请求。
小结
这里为什么会提到 XSS?
一方面是为了帮助大家分清楚这两种攻击的本质区别,一种攻击的得到了 cookie,另一种没有得到 cookie。另一方面,如果 csrfToken 是存在 cookie 里的,结果 cookie 都被偷了,CSRF 防护也就无法发挥作用了。
所以,XSS 防护也要一并做好。
以上