我正在与 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' />
所以我想知道为什么
csrftoken
和 csrfmiddlewaretoken
是不同的,如果请求来自用户或黑客,服务器如何使用这两个值来验证?
最佳答案
docs里有一些答案,但是 looking at the code真正解开这个“谜”
基本上 django 的作用如下:
例如,现在当您发出 POST 请求时,会发生以下情况
这个带有两个 token 的方法被称为 双重提交 Cookie . Django 的加盐方式允许将相同的 csrf 保密一段时间,而不必为每个请求更新 key
关于django - csrfmiddlewaretoken 和 csrftoken 是什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48002861/