Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %

Posted

技术标签:

【中文标题】Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %【英文标题】:Django: CSRF token missing or incorrect. / avoid % csrf_token %Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token % 【发布时间】:2014-07-12 08:32:15 【问题描述】:

我正在关注关于 Show me to do 的 Django 指南。但我有一个问题:

如果我只是复制他的代码,我会生成一个

禁止 (403) CSRF 验证失败。请求中止。

我已经通过添加解决了这个问题

context_instance=RequestContext(request)

对所有“我的”返回 render_to_response 并将标签 % csrf_token % 添加到我正在调用的表单中。

问题来了:我可以以任何方式将其设置为“在幕后”调用,还是必须将其添加到我的所有表单中?

【问题讨论】:

【参考方案1】:

CSRF 是一个重要的安全概念 AFAIK。

您必须为所有使用 post、put 或 delete 请求的表单设置 csrf_token [这将设置隐藏的 post 参数],或者您也可以使用 X-CSRFToken 标头。您可以使用render 快​​捷方式而不是render_to_response 默认包含RequestContext。见:

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

有一种方法可以完全避免 CSRF 检查,方法是删除 middleware 或使用 decorator .但我建议不要这样做。

【讨论】:

谢谢。但是对于您链接到的示例,我仍然必须在每次调用中做一些事情是不是可以定义我自己的 render_to_response ,只需在调用中添加 context_instance=RequestContext(request) ? 我认为没有后端解决方案,因为它也依赖于客户端以及 AFAIK。 CSRF 检查由django.middleware.csrf.CsrfViewMiddleware 处理,看看你是否可以扩展它以按照你的方式工作。【参考方案2】:

是的,您可以使用render(request, template, context) 而不是render_to_responserender 快捷方式自动使用 RequestContext。

【讨论】:

以上是关于Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %的主要内容,如果未能解决你的问题,请参考以下文章

Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %

CSRF 令牌丢失或不正确。 Django + AngularJS

Django - 403 禁止。 CSRF 令牌丢失或不正确

Django 表单中的 CSRF 令牌丢失或不正确

Unity Web Request + Django:CSRF 令牌丢失或不正确

禁止(CSRF 令牌丢失或不正确。)Django