我想知道我是否正确,它是否安全。通常我使用 Jquery 在 AJAX 请求上发送 csrf 令牌,如下所示:
$.ajax({
method: "POST",
...
data: {...'csrfmiddlewaretoken': '{{csrf_token}}'},
});
它可以工作,但文档没有说明如何执行此类操作。这和做文档建议的(获取cookie并在标题上设置)有什么区别?
从 cookie 读取值然后设置标头的优点是它不那么重复。如果你的ajax请求在静态javascript文件中,它也可以工作(如果它不是Django模板,那么你不能使用{{ csrf_token }}
)
但是,如果您愿意将csrf令牌添加到每个ajax post请求的数据中,那很好,这样做没有问题。
在标头上使用上下文变量的缺点是:
- 您应该始终在
data
中包含csrfmiddlewaretoken
- 通常,您不能将JS代码存储在单独的文件中,只能将其存储在模板中。
Django 文档为您提供了复制粘贴的 js 代码,您可以在项目级别包含在脚本中,而忘记csrfmiddlewaretoken