我正在用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文档中有所描述。
请看这个 联系. 它确切地解释了你的方法应该是什么。
基本上,如果你想让POST请求拥有csrf,你需要在头中发送csrf令牌。但是我们不会为非认证的请求要求csrf令牌。
如果你还没有使用Django Rest Framework来创建API的话,最好使用它。
一个解决方案是在setting.py文件中删除csrf token行:)