我对Django CsrfViewMiddleware机制有疑问。 我知道,Django:
但是Django没有检查令牌是否已被使用过(例如来自CsrfViewMiddleware):
if not constant_time_compare(request_csrf_token, csrf_token):
return self._reject(request, REASON_BAD_TOKEN)
所以我可以使用相同的令牌发送多个请求(我在我的服务器上测试过它)。
它是标准的行为,还是我的Django设置不正确? 感谢。
答案 0 :(得分:0)
不消耗CSRF令牌。
详细说明Germano的评论,背后的原因很简单:
多个浏览器窗口/标签和 REST
基本上,Django必须为过去呈现的每个页面创建(并持久化,并在分布式“云”部署中同步)新的CSRF令牌。从本质上讲,这很容易导致拒绝服务攻击,在这种情况下,您无法为CSRF假设任何明智的过期。