首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python框架CSRF失败: CSRF cookie未设置?

python框架CSRF失败: CSRF cookie未设置?
EN

Stack Overflow用户
提问于 2020-12-03 19:21:53
回答 1查看 1K关注 0票数 1

我有一个web应用程序,我需要做一些API级别的测试。我能够在curl命令中发出Django Post请求API调用,如下所示:

代码语言:javascript
复制
curl 'https://my-server.com/blablabla/api/public/v1/profiles' 
   -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0' 
   -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed 
   -H 'Referer: https://my-server.com/blablabla/api/public/v1/profiles' 
   -H 'X-CSRFToken: ...' 
   -H 'Connection: keep-alive' 
   -H 'Cookie: csrftoken=...; sessionid=...' 
   -H 'Content-Type: application/json' 
   --data-binary '{"group":"1","name":"XYZ"}'

但是,如果我试图按以下方式将类似的代码移植到python3中:

代码语言:javascript
复制
 #!/usr/bin/python3

import requests
import json

TOKEN  = 'X-CSRFToken: ...'
COOKIE = 'Cookie: ...; sessionid=...'
headers = {'X-CSRFToken': TOKEN, 'Cookie': COOKIE}
post_data = '{"group":"1","name":"XYZ"}'

response = requests.put("https://my-server.com/blablabla/api/public/v1/profiles", data=post_data, headers=headers)
print(response.json())
print(response.ok)
print(response.status_code)

我得到了如此失败的回报,

代码语言:javascript
复制
{'msg': ['CSRF Failed: CSRF cookie not set.']}
False
403

有人知道会出什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 02:15:11

您需要在请求中包含一个CSRF令牌(来自django),但是看起来您正在尝试包含一个令牌。

如果没有正确配置某些内容,Django就不接受令牌,我遇到了一些问题。造成这种情况的原因有很多,比如设置错误的SESSION_COOKIE_DOMAIN、CSRF_COOKIE_NAME或CSRF_COOKIE_DOMAIN (如果您要更改这些)。

它也可以是CSRF_COOKIE_SECURE或SESSION_COOKIE_SECURE设置之一。这两个示例都表明您正在使用HTTPS,因此应该将它们都设置为True。我记得在本地主机上调试时,我需要将它们设置为False,以便在HTTP上工作

查看Django配置文档以获得以下有用信息:https://docs.djangoproject.com/en/3.1/ref/settings/#session-cookie-secure

如果启用了CORS设置,也可以查看CORS设置。确保CORS_ALLOW_CREDENTIALS是真的。下面是一个描述CORS设置的链接,如果您正在使用它们:https://pypi.org/project/django-cors-headers/

也有可能有一个简单得多的解决方案。curl请求是GET,但是看起来Python代码正在执行PUT,这在CSRF中是完全不同的(GET并不真正关心它,但是PUT做的非常多)。因此,有一个问题可能是--您是尝试执行GET还是PUT到端点?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65132719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档