如何在django中预处理CORS POST请求中处理CSRF?

我试图通过AJAX从abc.comxyz.com (这是一个Django应用程序)的URL发出POST请求。 我通过向xyz.com上的URL发出GET请求来获取CSRF令牌,但在预先发送的请求中向xyz.com发出OPTIONS请求时令牌发生更改。

有什么方法可以获得OPTIONS请求在预检请求中的响应吗?

注意:

我遵循以下来源的说明:

  • https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
  • https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS
  • http://www.html5rocks.com/en/tutorials/cors/

  • Django CSRF保护将允许OPTIONS请求,因此第一阶段没有问题:

    https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works

    如果我理解正确,那么您希望下一个请求(例如,跨域POST)被允许通过。 为了使其工作并获得Django的CSRF保护,请求必须发送一个CSRF标记(在POST数据或AJAX标头中)和一个匹配的CSRF cookie。

    现在,跨域限制使得abc.com不可能为xyz.com设置或读取cookie,无论是来自javascript还是来自服务器端响应。 因此,这种做法是不可能的。

    相反,您必须将@csrf_exempt应用于视图。 这将允许任何网站发布到它。 因此,您需要为视图构建一些其他保护。 当然,你自己在检查你的保护安全。 请记住'Referer'和'Origin'标题可以很容易地用curl这样基本的东西来伪造。


    请参阅django-cors-headers ,您可能会发现它更适合解决您的问题:

    https://github.com/ottoyiu/django-cors-headers/
    

    Django-rest-framework建议http://www.django-rest-framework.org/topics/ajax-csrf-cors

    链接地址: http://www.djcxy.com/p/75567.html

    上一篇: How to handle CSRF in preflighted CORS POST request in django?

    下一篇: Is there a tutorial for coding a GUI without the inaccessible Interface Builder?