gpt4 book ai didi

Django - 禁止(未设置 CSRF cookie。)

转载 作者:行者123 更新时间:2023-12-04 21:22:15 29 4
gpt4 key购买 nike

我有一个中等流量的 Django 网站(每天大约有 4000/5000 次访问)。今天我在 settings.py 上配置了“LOGGING”选项以发送带有“Info”级别的电子邮件,只需检查一切是否正常...

令我惊讶的是,我收到以下错误:
[Django] 警告(外部 IP):禁止(未设置 CSRF cookie。)

No stack trace available

<WSGIRequest
path:/cadastro/usuario/,
GET:<QueryDict: {}>,
POST:<QueryDict: {**xxxxxxx (some varibles....) and**: u'csrfmiddlewaretoken': [u'4wqRKQXZsTmXJaOkCsGobWyG1rzihc8x'], }>,
COOKIES:{},
META:{'CONTENT_LENGTH': '381',
'CONTENT_TYPE': 'application/x-www-form-urlencoded',
'CSRF_COOKIE': 'qzc4i7JdHoQLJ8N5aI9MTlamOZMOKmP0',
'DOCUMENT_ROOT': '/opt/nginx/html',
'HTTP_ACCEPT': 'text/html, application/xhtml+xml, */*',
'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
'HTTP_ACCEPT_LANGUAGE': 'pt-BR',
'HTTP_CACHE_CONTROL': 'no-cache',
'HTTP_CONNECTION': 'Keep-Alive',
'HTTP_CONTENT_LENGTH': '381',
'HTTP_CONTENT_TYPE': 'application/x-www-form-urlencoded',
'HTTP_HOST': 'xxxxxx',
'HTTP_REFERER': 'http://xxxx/y/z',
'HTTP_USER_AGENT': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
'PATH_INFO': u'/y/z',
'QUERY_STRING': '',
'REMOTE_ADDR': '187.27.35.123',
'REMOTE_PORT': '54221',
'REQUEST_METHOD': 'POST',
'REQUEST_URI': 'y/z',
'SCRIPT_NAME': u'',
'SERVER_NAME': 'xxxxxxx',
'SERVER_PORT': '80',
'SERVER_PROTOCOL': 'HTTP/1.1',
'uwsgi.version': '0.9.6.5',
'wsgi.errors': <open file 'wsgi_input', mode 'w' at 0xa126338>,
'wsgi.file_wrapper': <built-in function uwsgi_sendfile>,
'wsgi.input': <open file 'wsgi_input', mode 'r' at 0xa126a70>,


'wsgi.multiprocess': True,
'wsgi.multithread': False,
'wsgi.run_once': False,
'wsgi.url_scheme': 'http',
'wsgi.version': (1, 0)}>

我试图重现这个错误,但我不能。我在 Firefox 和 Chrome 上进行了测试,清除了所有 cookie...一切都很好。但是我多次收到此错误,总是使用不同的 IP,所以我认为这不是攻击......我所有的表格都有 {% csrf_token %} django.middleware.csrf.CsrfViewMiddleware 在 MIDDLEWARE_CLASSES 上配置。

上面的日志信息很清楚 CSRF_COOKIE 不是空的。我正在使用 Django 1.4。

[更新]
我认为这些用户没有启用 cookie...
所以...问题是:如何对没有启用 cookie 的用户使用 CSRF?

最佳答案

正如我在我的主要评论中提到的,当由于 CSRF 失败而引发 403 时,您将看到该错误。

您无需担心在未启用 cookie 的情况下尝试针对用户处理 CSRF 保护。 CSRF 攻击的本质要求使用浏览器 cookie。如果不使用它们,CSRF 保护的请求将失败(如您所见)。因此,您仍然受到保护。

Django 允许您设置特定 View 以在 CSRF 失败时用于客户端:https://docs.djangoproject.com/en/dev/ref/settings/#std%3asetting-CSRF_FAILURE_VIEW

真的,除了注意有些请求试图以无效的方式 POST 到您的服务器之外,您不需要做任何其他事情。

关于Django - 禁止(未设置 CSRF cookie。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264437/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com