gpt4 book ai didi

django - csrfmiddlewaretoken 和 csrftoken 是什么关系?

转载 作者:行者123 更新时间:2023-12-01 12:16:14 28 4
gpt4 key购买 nike

我正在与 Django 合作创建一个网站,并遇到了一些关于 CSRF 的问题。我用 django.middleware.csrf.CsrfViewMiddleware并添加 <form action="" method="post">{% csrf_token %}在我的 POST 表单中。

当我测试网站时:

GET / HTTP/1.1
Host: 123.207.137.168:8000

然后,我得到了 cookies
Set-Cookie:csrftoken=Ev8veOH89vFDnG3a0GJUsMXA1oGZXxqXRw2nFWiKrvZ9UE10niTlZCiOxdnoKfTv; expires=Thu, 27-Dec-2018 06:37:41 GMT; Max-Age=31449600; Path=/

但是在 html 中:
<input type='hidden' name='csrfmiddlewaretoken' value='JswHLk4fNpxHkh0OObD1uKiOxSDUzkMDWtqzcsFR5pRdRfYEbNNs1AD23Hkjm2fb' />

所以我想知道为什么 csrftokencsrfmiddlewaretoken是不同的,如果请求来自用户或黑客,服务器如何使用这两个值来验证?

最佳答案

docs里有一些答案,但是 looking at the code真正解开这个“谜”
基本上 django 的作用如下:

  • 制作 CSRF key
  • 向其中添加随机盐并将加盐结果设置为 CSRF cookie ( csrftoken )
  • 当用户打开一个表单/请求/任何东西时,检查用户是否设置了 CSRF cookie(如果他们没有,按照上面的方法制作)。如果他们拥有它,取出它,去除盐并获得真正的 secret ,添加随机盐并将其用作另一个 token ( csrfmiddlewaretoken )。

  • 例如,现在当您发出 POST 请求时,会发生以下情况
  • 您发送 csrfmiddlewaretoken
  • Django 对 csrf cookie ( csrftoken )
  • 脱盐
  • Django 对您发送的 token 取消加盐 ( csrfmiddlewaretoken )
  • Django 比较了它们。如果两者匹配,你就可以了。

  • 这个带有两个 token 的方法被称为 双重提交 Cookie . Django 的加盐方式允许将相同的 csrf 保密一段时间,而不必为每个请求更新 key

    关于django - csrfmiddlewaretoken 和 csrftoken 是什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48002861/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com