2012-08-05 4 views
5

우리는 방금 외부 세계에 노출되기 시작한 작은 사이트가 있습니다. 대부분의 경우 매우 잘 작동하지만 때때로 403 양식 중 하나에서 "CSRF FAILURECSRF 쿠키가 설정되지 않았습니다"라는 메시지가 표시됩니다. 양식은 확실히 포함 {% csrf_token %}을 가지고 있으며, 우리의 미들웨어는 다음과 같습니다Sporadic 403 "CSRF FAILURECSRF 쿠키가 설정되지 않았습니다"장고와 함께 오류가 발생했습니다

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

양식은 대부분의 사람들에게 잘 작동하지만 약 하루에 한 번 나는 실패 케이스와 전자 메일을받을. 전자 메일은 다음과 같다 실제 요청이 포함 (I 개인 데이터를 숨길 수있는 POST 데이터의 나머지 부분을 삭제 한을하지만, csrfmiddlewaretoken 왼쪽) :

<WSGIRequest 
path:/main/10/apply/, 
GET:<QueryDict: {}>, 
POST:<QueryDict: {u'csrfmiddlewaretoken': [u'IQQZvbVIggJm6Be6VinPHj8Qn3i3TdmG']}>, 
COOKIES:{}, 
META:{'CONTENT_LENGTH': '111978', 
'CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundaryLyo9BPXnAwKnt8ew', 
'CSRF_COOKIE': 'XmSPWJZk2UwS4PNBXRmVlAaYDDdNaGqk', 

가 CSRF_COOKIE가 csrfmiddlewaretoken 일치하지 않습니다 이것은 제가 문제를 일으킨다 고 가정하는 것입니다. 그러나 일부 제출물에 대해서는 이러한 정보가 어떻게 동기화되지 않는지 알 수는 없습니다. 페이지는 몇 개의 필드 만있는 매우 단순한 양식입니다.

어디서 볼까요? 아파치를 통해 mod_wsgi를 사용하여 CentOS에서 최신 Django 1.4.1을 실행하고 있습니다.

편집 : 성공적인 요청에 비해 이상한 것 같다 유일한 다른 점은 여기에 COOKIES:{} 섹션 않는 이유는 아마도 그들은 단지 자신의 브라우저에서 비활성화 쿠키를 의심하는 나를 이끌하지만 것이다, 비어 있다는 것입니다 META 섹션의 CSRF_COOKIE와 함께 표시됩니까?

도움 주셔서 감사합니다.

브랜든

+0

이 똑같은 문제가 있습니다. 당신은 해결책을 찾아 냈습니까? –

+0

일종. 문제는 일부 사용자가 쿠키를 사용하지 않도록 설정했기 때문에 서버 측에서 쿠키를 수정할 수있는 방법이 없다는 것입니다. 우리는 공개적으로 대면하는 형태로 CSRF 보호를 중단하게되었습니다. 로그인 페이지 나 기타 중요한 데이터에는이 작업을 수행하지 말고 CSRF 보호가 반드시 필요한 것은 아닙니다. – brandon

답변

0

HTTP_COOKIE도 공백입니까?

django가 요청에서 CSRF 토큰 쿠키를 보지 못했을 수 있으며 CSRF_COOKIE를 생성하고 meta로 저장 중일 수 있습니다.