代码之家  ›  专栏  ›  技术社区  ›  T. Stone

拥有可发布的API和Django的CSRF中间件

  •  31
  • T. Stone  · 技术社区  · 14 年前

    我有一个django webapp,它有一个前端的、可访问web的组件和一个由桌面客户机访问的API。然而,现在有了新的CSRF中间件组件,来自桌面客户机的API请求得到了403。

    我理解为什么会发生这种情况,但是在不损害安全的情况下,解决这种情况的正确方法是什么?有没有什么方法可以在HTTP头中表明这是一个API请求,Django不应该检查CSRF,或者这是一个坏策略?

    编辑——

    我现在使用的方法是桌面客户机设置一个header,x-requested-with:xmlhttprequest。这有点老土,但我不确定如何更好地处理。

    3 回复  |  直到 10 年前
        1
  •  10
  •   Mp0int    10 年前

    如何为桌面客户机拆分视图并用 csrf_exempt ?

        2
  •  7
  •   Adam Spence    12 年前

    如果您使用的是基于类的视图,那么您将需要csrf_免除分派方法,而不是像下面这样的post方法:

    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super(MyView, self).dispatch(request, *args, **kwargs)
    

    查看此错误通知单: https://code.djangoproject.com/ticket/15794

        3
  •  -3
  •   Alex Morega    14 年前

    自从Django1.1以来,CSRF代码将自动允许Ajax请求通过,因为浏览器似乎做了适当的安全检查。这里是 original commit 以及 documentation .