python - django csrf token 在每个请求上都必须是唯一的吗?

标签 python django django-csrf csrf-protection

我有一个关于 Django CsrfViewMiddleware 机制的问题。 我知道,Django:

  1. 为每个请求设置新的 csrftoken cookie。
  2. 检查 X-CSRFToken header 值(或隐藏输入“csrfmiddlewaretoken”)必须等于 csrftoken cookie。

但 Django 不检查 token 是否已被使用(来自 CsrfViewMiddleware 的示例):

if not constant_time_compare(request_csrf_token, csrf_token):
            return self._reject(request, REASON_BAD_TOKEN)

所以我可以使用相同的 token 发布多个请求(我在我的服务器上测试过)。

这是标准行为,还是我的 Django 设置不正确? 谢谢。

最佳答案

CSRF token 不会被消耗。

要详细说明 Germano 的评论,其背后的原因很简单:

多个浏览器窗口/标签REST

本质上,Django 必须为过去呈现的每个页面创建(并持久化,并在分布式“云”部署中同步)新的 CSRF token 。从本质上讲,这很容易导致拒绝服务攻击,在这种情况下您不能假设 CSRF 有任何合理的过期时间。

关于python - django csrf token 在每个请求上都必须是唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507514/

相关文章:

由于某种原因,Python 请求库帖子被 Django 解释为 GET

javascript - javascript 表单和 Django 存在问题

python - 将 Thrift 客户端连接到同一主机上不同 docker 容器中的 Thrift 服务器

python - 使用 python selenium 截取一个元素显示屏幕错误部分的图像

python - Python 中的两个 return 实例有问题吗?

html - Django 不显示图像和渲染 CSS

python - 利布罗萨 0.8.0 |人声分离输出有效,但速度高达 200%

python - Django - ajax_select 小部件

reactjs - 如何使用 Axios 将 CSRF Coo​​kie 从 React 发送到 Django Rest Framework

django - 将 csrf token 传递给 Stripe