【发布时间】:2020-06-05 22:41:53
【问题描述】:
我正在使用 Django 为移动应用程序开发一个后端,用于用户注册的用户数据是使用 POST 方法发送的。由于 Django 提供 CSRF 安全性作为中间件。这里我的问题是,如果我有前端,我可以通过 jinja 代码启用 CSRF 令牌 {% csrf_token %} 但由于它是后端以及如何解决此问题
【问题讨论】:
我正在使用 Django 为移动应用程序开发一个后端,用于用户注册的用户数据是使用 POST 方法发送的。由于 Django 提供 CSRF 安全性作为中间件。这里我的问题是,如果我有前端,我可以通过 jinja 代码启用 CSRF 令牌 {% csrf_token %} 但由于它是后端以及如何解决此问题
【问题讨论】:
要防范此类攻击,您需要做两件事: 1 确保“安全”HTTP 操作(例如 GET、HEAD 和 OPTIONS)不能用于更改任何服务器端状态。 2 确保任何“不安全”的 HTTP 操作,例如 POST、PUT、PATCH 和 DELETE,始终需要有效的 CSRF 令牌。 如果您使用 SessionAuthentication,则需要为任何 POST、PUT、PATCH 或 DELETE 操作包含有效的 CSRF 令牌。 为了发出 AJAX 请求,您需要在 HTTP 标头中包含 CSRF 令牌,如 Django 文档中所述。
检查此link。它准确地解释了你的方法应该是什么。
如果您希望 POST 请求具有 csrf,基本上您需要在标头中发送 csrf 令牌。但我们不会为未经身份验证的请求请求 csrf 令牌。
如果你还没有使用 Django Rest Framework 来创建 API,那会更好
【讨论】:
一种解决方案是删除 csrf 令牌行表单 setting.py 文件 :)
【讨论】: