首页 > 解决方案 > 多个 csrftoken cookie,只有 1 个 csrftoken 是 RFC 要求吗?

问题描述

我试图找到以下问题的答案。

我附上了一个示例屏幕截图,显示了我所看到csrftoken的多个 cookie 路径和到期时间(多租户和各种表单路径)。

在此处输入图像描述

有关的:

标签: pythondjangohttpcookiessession-cookies

解决方案


这里的令牌存储在 cookie 中。Cookie根据其范围路径)和cookie 名称是唯一的。

在这种情况下,所有 cookie 都具有相同的名称 - csrftoken,它们也具有相同的域 - 127.0.0.1,但每个 cookie 的路径都是唯一的。因此,不同的范围(更具体地说,路径)允许拥有多个 cookie。


描述CSRF 攻击保护措施的最受引用和最受尊敬的文档是OWASP 跨站点请求伪造预防备忘单GitHub Markdown 变体)。


为每个用户会话生成一个 csrf 令牌并将其存储在 cookie中是最流行的方法。与会话相关联使其在一定程度上免受 cookie 更改的影响。请注意,您应该使用其他方法(即双重提交 cookie并在请求正文中包含令牌)进行保护,因为 cookie 会根据请求自动发送。

会话更改视图(登录/注销/密码更改)和其他重要且高度安全的视图(即汇款)可能而且应该使用高级和/或附加技术(即用户交互)进行保护。


为什么返回了多个 csrf 令牌?

后端行为的可能解释:可能是尝试将 graphql 支持添加到应用程序。它看起来也像是 graphql 和 rest 的组合。

/graphql端点发出了请求,该请求又遍历所有其他 api 端点,就好像将来POST / PUT / PATCH可能向它们发出请求一样,每个端点/视图都将其自己的per-path / per-form(甚至每个请求的)csrftoken cookie 添加到响应中。此外,使用这种方法,下一个请求预计不会发送到/graphql端点,而是直接发送到其余 api 端点/视图 URL 之一。

使用 Graphql,您将只有一个 /graphql端点,所有请求都将发送给它。

此外,拥有多个 csrf 令牌(每个端点)并没有带来太多优势


对于添加Graphql API到 django 的方法 - 检查Graphene

如果您正在考虑将单独的前端应用程序与 Django 后端一起使用,那么您绝对应该看看django-cors-headers(并使用它)。


推荐阅读