【发布时间】:2018-09-15 14:13:05
【问题描述】:
据我了解,Django验证CSRF的方式是通过比较
request.POST.get('csrfmiddlewaretoken', '') | request.META.get(settings.CSRF_HEADER_NAME, '') == request.session.get(CSRF_SESSION_KEY) | request.COOKIES[settings.CSRF_COOKIE_NAME]
现在,比较这两个令牌(一个来自 LHS,一个来自 RHS)的方式是通过使用以下函数进行解密
被比较的 2 个令牌不同,但被解密为相同的 “秘密”。
我的问题是 Django 不应该确保它们不同吗?如果不能确保它们不同,那么使用 2 个不同的令牌(以及解密它们的开销)的目的是什么?
【问题讨论】:
-
为什么要检查它们是否不同?
-
为什么他们首先要制作两个不同的令牌?不管是什么原因,他们不应该确保它是不同的吗?
-
我真的完全无法理解你的想法。 为什么它们应该不同?重点是避免请求伪造,即确保 POST 是对先前发送的 GET 的响应。那么,这会让您觉得他们需要有所不同吗?
-
我理解 CSRF 的目的,我认为它不应该有所不同。但它是。我试图理解为什么?
标签: python django csrf csrf-protection django-csrf