Django - Proibido (cookie CSRF não definido).
Eu tenho um site do Django com tráfego médio (cerca de 4000/5000 visitas por dia). Hoje configurei a opção "LOGGING" em settings.py para enviar um e-mail com o nível "Info", apenas verifique se está tudo ok ...
Houve a minha surpresa, estou recebendo o seguinte erro: [Django] AVISO (IP EXTERNO): Proibido (cookie CSRF não definido).
<code>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)}> </code>
Tentei reproduzir esse erro, mas não consegui. Eu testei no Firefox e no Chrome, limpei todos os cookies ... Tudo está bem. Mas eu estou recebendo esse erro uma dúzia de vezes, sempre com IP diferente, então eu suponho que não é um ataque ... Toda a minha forma tem{% csrf_token%} edjango.middleware.csrf.CsrfViewMiddleware está configurado em MIDDLEWARE_CLASSES.
A mensagem de log acima é muito claraCSRF_COOKIE não está vazio. Eu estou usando o Django 1.4.
[ATUALIZADO] Acho que esses usuários não têm cookies habilitados ... Então ... O problema é: Como usar o CSRF com usuários que não possuem cookies ativados?