姜戈.阿贾克斯.像这样发送 csrf 令牌是错误的吗?



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

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

它可以工作,但文档没有说明如何执行此类操作。这和做文档建议的(获取cookie并在标题上设置)有什么区别?

从 cookie 读取值然后设置标头的优点是它不那么重复。如果你的ajax请求在静态javascript文件中,它也可以工作(如果它不是Django模板,那么你不能使用{{ csrf_token }}

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

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

  1. 您应该始终在data中包含csrfmiddlewaretoken
  2. 通常,您不能将JS代码存储在单独的文件中,只能将其存储在模板中。

Django 文档为您提供了复制粘贴的 js 代码,您可以在项目级别包含在脚本中,而忘记csrfmiddlewaretoken

最新更新