NOTE

1.8 CSRF

CSRF 的原理、同源策略关系与防御。

Security创建于 更新于 约 2 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. CSRF攻击是什么

一种Web攻击 比如淘宝付款是get请求 用户登陆了淘宝,获取了cookie保存在本地。 用户访问了危险网站,危险网站发送了一个get请求到淘宝付款链接。 浏览器会带上淘宝的cookie去访问淘宝付款链接 ok,最后真的付款了

2. 为什么有跨域限制还会发生CSRF

浏览器同源策略以及跨域.md

  1. 同源策略对cookie的限制只是针对js,不能读写非同源的cookie。但是无论是否同源,浏览器都会带上相应的cookie访问服务器。
  2. 同源策略允许跨域提交表单

3. 如何防止CSRF攻击

token校验。步骤如下:

  1. 前端请求后端
  2. 后端生成唯一的token保存起来,并返回给前端,有两种方式
    • 把token渲染到html中。
    • 把token写到cookie中。
  3. 前端取出token拼接到请求参数中访问后端,有两种方式
    • js DOM操作取出html中的token(同源策略会限制脚本 API 操作)
    • js读取cookie中的token(同源策略限制 cookie 操作)
  4. 后端从请求参数中取出token,检验token一致性

4. 实例

4.1. CSRF Filter

  1. 前端使用js从cookie中读取session_cookie(登录态),计算csrf_token,放入http url参数中
  2. 后端从http url参数中取出csrf_token,然后从cookie中读取session_cookie(登录态),计算csrf_token,对比两个token是否一致

可以看出csrf_token在每个用户登录周期内是唯一的,但是不是每个请求唯一的。这个token一旦泄露仍有风险,比如通过referrer外泄,所以得加上以下代码:

<meta name="referrer" content="origin">

5. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看