Django的。阿贾克斯。发送像这样的csrf令牌是错误的吗?

时间:2016-02-09 19:46:14

标签: jquery ajax django

我想知道我是否正确地做了它以及它是否安全。通常我使用Jquery在AJAX请求上发送csrf标记,如下所示:

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

它有效,但documentation并没有说出做这样的事情。这与文档推荐的内容有什么区别(获取cookie并在标题上设置)?

2 个答案:

答案 0 :(得分:1)

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

  1. 您应始终在csrfmiddlewaretoken
  2. 中加入data
  3. 一般情况下,您无法将JS代码存储在单独的文件中,只能将其存储在模板中。
  4. Django docs为您提供了复制粘贴js代码,您可以在项目级别的脚本中包含并忘记csrfmiddlewaretoken

答案 1 :(得分:1)

从cookie中读取值然后设置标题的优点是重复性较低。如果您的ajax请求位于静态javascript文件中(如果它不是Django模板,则您无法使用{{ csrf_token }}

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