如何在django中预处理CORS POST请求中处理CSRF?
我试图通过AJAX从abc.com
向xyz.com
(这是一个Django应用程序)的URL发出POST
请求。 我通过向xyz.com
上的URL发出GET
请求来获取CSRF令牌,但在预先发送的请求中向xyz.com
发出OPTIONS
请求时令牌发生更改。
有什么方法可以获得OPTIONS
请求在预检请求中的响应吗?
注意:
我遵循以下来源的说明:
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?