중간 트래픽 (약 4000/5000 하루 방문)이있는 장고 웹 사이트가 있습니다. 오늘 settings.py에 "LOGGING"옵션을 구성하여 "Info"레벨의 이메일을 보내고 모든 것이 정상인지 확인하십시오.Django - 금지됨 (CSRF 쿠키가 설정되지 않음)
놀랍지 만 다음 오류가 발생했습니다 : [Django (외부 IP) 경고 : 금지
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)}>
내가이 오류를 재현 해 보았습니다. (CSRF 쿠키가 설정되지 않음),하지만 제 육체. Firefox 및 Chrome에서 테스트하고 모든 쿠키를 정리했습니다. 모든 것이 정상입니다. 하지만이 오류는 수십 시간 동안 계속 발생합니다. 항상 다른 IP를 사용하기 때문에 공격이 아님을 전제로합니다. 내 양식에 모두 {% csrf_token %} 및 django.middleware.csrf.CsrfViewMiddleware MIDDLEWARE_CLASSES에 구성됩니다.
위 로그 메시지는 CSRF_COOKIE이 비어 있지 않음을 분명히합니다. 나는 장고 1.4를 사용하고있다.
[업데이트 됨] 나는이 논문 사용자가 쿠키를 사용할 수 없다고 생각합니다 ... 그래서 ... 문제는 : 쿠키를 사용하지 않는 사용자가 CSRF를 사용하는 방법입니다.
클라이언트에서 쿠키가 활성화되지 않았습니까? 크롤러 또는 임의의 클라이언트 유형 일 수 있습니다. – jdi
Hello Jdi, POST 변수 유효한 사용자 (크롤러가 아님)임을 알 수 있습니다. 클라이언트가 쿠키를 사용하지 않으면 "CSRF_COOKIE"가 비어 있지 않습니까? – Thomas
Jdi, 방금이 테스트를 수행했습니다 ... firecookie로 CSRF_COOKIE를 제거했는데 오류가 발생했습니다. 이런 오류가 많이 발생하기 때문에 이것이 문제가 될지 모르지만 쿠키를 사용하도록 사용자에게 어떻게 경고 할 수 있습니까? – Thomas