Jquery 德扬戈。AJAX这样发送csrf令牌是错误的吗?

Jquery 德扬戈。AJAX这样发送csrf令牌是错误的吗?,jquery,ajax,django,Jquery,Ajax,Django,我想知道我做的是否正确,是否安全。通常,我使用Jquery在AJAX请求上发送csrf令牌,如下所示: $.ajax({ method: "POST", ... data: {...'csrfmiddlewaretoken': '{{csrf_token}}'}, }); 这是可行的,但政府并没有说要做这样的事情。这与执行文档建议的操作(获取cookie并在标题中设置)有什么区别 在标题上使用上下文变量的缺点是: 您应该始终在数据中包含c

我想知道我做的是否正确,是否安全。通常,我使用Jquery在AJAX请求上发送csrf令牌,如下所示:

$.ajax({
       method: "POST",
       ...
       data: {...'csrfmiddlewaretoken': '{{csrf_token}}'},
       });

这是可行的,但政府并没有说要做这样的事情。这与执行文档建议的操作(获取cookie并在标题中设置)有什么区别

在标题上使用上下文变量的缺点是:

  • 您应该始终在
    数据中包含
    csrfmiddlewaretoken
  • 通常,您不能将JS代码存储在单独的文件中,只能将其存储在模板中

  • Django文档为您提供了复制粘贴js代码,您可以在项目级别的脚本中包含这些代码,而不必考虑csrfmiddlewaretoken

    从cookie中读取值,然后设置标头,这样做的优点是重复性较小。如果ajax请求位于静态javascript文件中(如果不是Django模板,则不能使用
    {{csrf_token}}
    ),它也可以工作


    但是,如果您很乐意将csrf令牌添加到每个ajax post请求的数据中,那么这样做没有问题。

    但是这与文档编写的内容不是完全不同吗?根据文档,人们应该得到cookie并在标题上设置。在这里,我将它作为一个上下文变量放在DOM中,并将其放在request.body.Yes中,从cookie中获取并放到头中。这就是js所做的。您不需要在查询数据中显式地设置它,django将自动处理事情