【问题标题】:How to disable Django's CSRF protection behind a proxy如何在代理后面禁用 Django 的 CSRF 保护
【发布时间】:2011-01-25 09:44:40
【问题描述】:

我需要在代理后面运行一个 Django 系统(我们称之为 Alfred)。两者都在同一个网络上。作为代理,我使用 yuri vandermeer 的 django-httpproxy。 (参见他的页面 yvandermeer.net)

两个系统都运行 Django 版本 1.2.4

两个系统都在同一个(封闭的)网络中,并且在同一个 IP 上。我的代理在端口 8000 上运行,Alfred 在端口 1337 上运行。我需要使用他的 /admin 站点登录到 Alfred,这是 Django 默认提供的(我已启用)。这是通过端口 1337 工作的,但我需要通过端口 8000 访问它。

当我尝试它时,Alfred 抛出 403 CSRF 错误并告诉我我实际上是一个中间人(- Alfred 说的完全正确)。

我尝试了几种方法来禁用 Alfreds CSRF 保护:

  1. 我在 MIDDLEWARE_CLASSES 的 settings.py 中注释掉了 CsrfViewMiddleware
  2. 我创建了一个 disable.py 并将其 disableCSRF 类添加到 MIDDLEWARE CLASSES(实际上我尝试了每个 [!] 位置),就像本网站上提到的 (questions/1785772)

    #disable.py
    class DisableCSRF(object):
        def process_request(self, request):
            setattr(request, '_dont_enforce_csrf_checks', True)
  3. 我创建了一个 disable.py 并将其 disableCSRF 类添加到 MIDDLEWARE CLASSES(我再次尝试了每个位置),就像这里的另一篇文章中提到的那样:http://hi.baidu.com/ledzep2/blog/item/e6b1612e21884c5c4ec2267a.html

    #disable.py
    class DisableCSRF(object):
        def process_view(self, request, callback, callback_args, callback_kwargs):
            setattr(request, '_dont_enforce_csrf_checks', True)
  4. 我试图在 django/middleware/csrf.py 中注释掉 Csfr 保护机制,但我发现第 190 行附近的相关部分不是像本网站上提到的那样在第 160 行附近:问题/1650941/

上面提到的所有事情都不起作用。当我尝试通过 /admin 登录时总是收到 403 错误

如何禁用 Alfred 的 CSRF 保护?是否可以只为 /admin 禁用它?我希望我可以通过 2. 和 3. 中提到的中间件来做到这一点,而不是像 4. 中那样在源代码中注释掉一些东西。如果有中间件方式那就太好了。

提前致谢! :)

【问题讨论】:

    标签: python django proxy django-admin django-authentication


    【解决方案1】:

    您可以在视图函数上使用 @csrf_exempt 装饰器来禁用该视图的 csrf。
    documentation

    【讨论】:

    • 因为我真的不想在后面的系统中更改 django.contrib.auth 中的代码,所以这不是一个选项。
    【解决方案2】:

    错在我这边。通过检查服务器日志,我意识到不是 Alfred 抛出了错误,而是代理(django-httpproxy)。可能是因为两台服务器都在本地主机上运行,​​而且我也在从本地主机发送我的请求。我为 Proxy 和 Alfred 都禁用了 CSRF。 使用此设置,我不再收到任何 403 错误。

    很遗憾,django-httpproxy 丢失了 cookie,因此我无法登录。

    经验教训:不要使用 django-httpproxy 作为反向代理。

    【讨论】:

    • djproxy 可能是您更好的选择。不会丢失cookie信息,更易于配置和使用。
    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2012-07-07
    • 2010-12-19
    • 2011-08-01
    • 2019-11-25
    • 2020-04-14
    • 2012-06-28
    • 2016-01-21
    相关资源
    最近更新 更多