python - 多个 csrftoken cookie,只有 1 个 csrftoken 是 RFC 要求吗?
问题描述
我试图找到以下问题的答案。
- 什么情况下浏览器会存储多个
csrftoken
cookies? - 它是正确的还是技术上有效的功能?
- 在 RFC/安全文档中传递一个数组,或者尝试一个
csrftoken
存在的数组,或者在技术上是有效的?
我附上了一个示例屏幕截图,显示了我所看到csrftoken
的多个 cookie 路径和到期时间(多租户和各种表单路径)。
有关的:
解决方案
这里的令牌存储在 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(并使用它)。
推荐阅读
- c# - 如何从内部勾勒出数据网格单元格,使数据网格行不移动?
- notifications - 打开时自动弹出框
- python - GitLab CI - Python 脚本或 Runner 无法使用 UNC 命名访问网络驱动器
- google-bigquery - BigQuery 加入时间单位列分区表
- c# - Linq to SQL - 使用 Where 子句按相关表排序
- linux - 如何使用 Ada 代码关闭图形窗口/小部件?
- nosql - DynamoDB 分区键
- powershell - Powershell CSV 查询
- javascript - 从 API 获取数据 - 控制台重复
- arrays - 从给定的单个整数打印模式