2012-08-05 7 views
5

Wir haben eine kleine Seite, die gerade beginnt, nach außen ausgesetzt zu sein. In den meisten Fällen funktioniert es sehr gut, aber wir bekommen gelegentlich 403 Fehler mit der Nachricht "CSRF FAILURECSRF Cookie nicht gesetzt" von einem der Formulare. Die Form hat auf jeden Fall die {% csrf_token %} enthielt, und unsere Middleware wie folgt aussieht:Sporadisch 403 "CSRF FAILURECSRF Cookie nicht gesetzt" Fehler mit Django

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', 
) 

Die Form für die meisten Menschen gut funktioniert, aber etwa einmal am Tag bekomme ich eine E-Mail mit einem Fehlerfall. Die E-Mail enthält die aktuelle Anforderung, die wie folgt aussieht (ich den Rest der POST-Daten entfernt haben private Daten zu verstecken, aber verließ die 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', 

Die CSRF_COOKIE nicht die csrfmiddlewaretoken überein , was ich annehme, verursacht das Problem, aber ich kann nicht herausfinden, wie diese für einige Übermittlungen nicht synchron sind, aber nicht andere. Die Seite ist eine ziemlich einfache Form mit nur wenigen Feldern.

Irgendwelche Vorschläge für, wo ich aussehen sollte? Ich benutze den neuesten Django 1.4.1 auf CentOS mit mod_wsgi über Apache.

Edit: Die einzige andere Sache, die im Vergleich zu den erfolgreichen Anforderungen merkwürdig erscheint, ist, dass hier der COOKIES:{} Abschnitt leer ist, was mich führen würde, dass vielleicht zu vermuten, sie haben nur deaktiviert Cookies in ihrem Browser, aber warum dann tut Es erscheint mit der CSRF_COOKIE in der META-Sektion?

Danke für Ihre Hilfe!

Brandon

+0

Ich laufe auf genau dasselbe Problem. Haben Sie jemals eine Lösung gefunden? –

+0

Art von. Das Problem war, dass einige Benutzer Cookies deaktiviert hatten und es keine Möglichkeit gibt, das vom Server aus zu beheben. Am Ende haben wir den CSRF-Schutz für die Öffentlichkeitsarbeit abgeschaltet. Tun Sie dies nicht für Anmeldeseiten oder andere sensible Daten, aber CSRF-Schutz ist nicht immer unbedingt erforderlich. – brandon

Antwort

0

Ist HTTP_COOKIE auch leer?

Es könnte sein, dass der Django keinen CSRF-Token-Cookie in der Anfrage sieht und ein neues CSRF_COOKIE erzeugt und es in Meta setzt.

Verwandte Themen