У меня есть сайт Django со средним трафиком (около 4000/5000 посещений в день). Сегодня я настроил опцию «LOGGING» на settings.py, чтобы отправить электронное письмо с уровнем «Информация», просто проверьте, все ли в порядке ...Django - Запрещено (CSRF cookie не установлен.)
Было мое удивление, я получаю сообщение об ошибке: [Django ] ПРЕДУПРЕЖДЕНИЕ (ВНЕШНИЙ IP): Запретный (CSRF печенье не установлен.)
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)}>
Я попытался воспроизвести эту ошибку, но я couldn't. Я тестирую Firefox и Chrome, очищаю все файлы cookie ... Все в порядке. Но я получаю эту ошибку дюжину времени, всегда с разными IP-адресами, поэтому я полагаю, что это не атака ... Вся моя форма имеет {% csrf_token%} и django.middleware.csrf.CsrfViewMiddleware настроен на MIDDLEWARE_CLASSES.
Сообщение журнала очень ясно, что CSRF_COOKIE не является пустым. Я использую Django 1.4.
[ОБНОВЛЕНО] Я думаю, что тезисы пользователей не имеют файлов cookie, включенных ... Итак ... Проблема в том, как использовать CSRF с пользователями, у которых нет файлов cookie?
Может быть, у клиента нет файлов cookie? Может быть, это сканер или какой-то случайный тип клиента. – jdi
Здравствуйте, Jdi, переменная POST Я вижу, что это действительный пользователь (а не искатель). Если у клиента нет cookie, значит, CSRF_COOKIE не будет пустым? – Thomas
Jdi, я просто сделал этот тест здесь ... Я удалил CSRF_COOKIE с firecookie, и я получил ошибку. Я не уверен, что это проблема, потому что я получаю много таких ошибок, но знаете ли вы, как я могу предупредить пользователя о включении файлов cookie? – Thomas