浅浅谈CSRF防御

237 阅读1分钟

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 防护也要一并做好。

以上