Python 如何使django服务器和angular客户端项目与CSRF保护不同
我读过关于django和angular的不同博客,但它们都在django项目中有客户端(HTML+CSS+JS)代码 我只想创建两个项目:一个是所有客户端堆栈(HTML+JS+CSS),另一个是仅使用Django和Django rest框架。这意味着我可以在不同的项目中编写我的所有演示代码,在不同的项目中编写服务器代码,但使用RESTAPI将它们链接在一起 <>但是有一个威胁,我应该一直考虑CSDF,Django的CSRF中间件提供了很好的安全性。Python 如何使django服务器和angular客户端项目与CSRF保护不同,python,django,angularjs,django-csrf,csrf-protection,Python,Django,Angularjs,Django Csrf,Csrf Protection,我读过关于django和angular的不同博客,但它们都在django项目中有客户端(HTML+CSS+JS)代码 我只想创建两个项目:一个是所有客户端堆栈(HTML+JS+CSS),另一个是仅使用Django和Django rest框架。这意味着我可以在不同的项目中编写我的所有演示代码,在不同的项目中编写服务器代码,但使用RESTAPI将它们链接在一起 但是有一个威胁,我应该一直考虑CSDF,Django的CSRF中间件提供了很好的安全性。 那么,是否有可能将我的客户机代码放在Django项
那么,是否有可能将我的客户机代码放在Django项目目录之外,但仍然受到CSRF的保护?阅读文档,所有内容都解释得很好。最干净的方法是在使用Ajax提交数据时,必须添加一个自定义头X-CSRFToken。可以从cookies解析令牌,顺便说一下,应该启用cookies。这里有一个链接到 文档总是找到问题的最佳地方,你只需阅读mate即可。但无论如何,这里有一个例子:
// Using the jquery cookie plugin, you can get the csrf token like this
var csrftoken = $.cookie('csrftoken');
然后在javascript/Anuglar代码中,要发布或发出ajax请求,必须在发出post/PUT请求之前添加X-CSRFToken
头:
// This HTTP method doesn't need protection since you will be reading and not pushing data
// into the server
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
// This is for setting up the upcoming ajax request, here you add the header with the
// csrftoken you got it from the cookies
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
NB:这是使用jQuery,您仍然可以使用Angular做同样的事情
在此之后,您可以进行Ajax调用,Django将愉快地接受您的请求,请再次说明,所有内容都已解释清楚,您已经包含了所有这些代码示例。在文档中,我们必须首先获得CSRF令牌。在django中,我们将{%csrf_token%}放在模板文件中。但我希望我的angularjs完全分离,即不被django web框架呈现,该令牌将不会被替换。因此,如果不使用{%csrf_token%}代码,是否可以通过csrf Middleware进行保护您不必这样做,因为csrf_令牌是通过cookies传递的,您可以通过javascript/Angular.js代码访问它,但是请阅读文档,您将在那里找到更多信息,干杯。