2012-08-05 10 views
5

Abbiamo un piccolo sito che sta appena iniziando a essere esposto al mondo esterno. Per la maggior parte funziona molto bene, ma occasionalmente riceviamo errori 403 con il messaggio "cookie FAILURECSRF CSRF non impostato" da uno dei moduli. Il modulo ha sicuramente la {% csrf_token %} incluso, e il nostro middleware si presenta così:Sporadic 403 "CSRF FAILURECSRF cookie non impostato" errori con 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', 
) 

Il modulo funziona bene per la maggior parte delle persone, ma circa una volta al giorno ricevo una e-mail con un caso fallimento. L'e-mail contiene la richiesta effettiva, che assomiglia a questo (ho rimosso il resto dei dati POST per nascondere i dati privati, ma ha lasciato la 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', 

Il CSRF_COOKIE non corrisponde al csrfmiddlewaretoken , che è quello che presumo sta causando il problema, ma non riesco a capire come questi non sono sincronizzati per alcune presentazioni ma non per altre. La pagina è una forma piuttosto semplice con solo pochi campi.

Qualche suggerimento su dove dovrei guardare? Sto eseguendo l'ultima versione di Django 1.4.1 su CentOS usando mod_wsgi tramite apache.

Edit: L'unica altra cosa che sembra strano rispetto alle richieste riuscite è che qui la sezione COOKIES:{} è vuota, il che mi avrebbe portato a sospettare che forse hanno solo i cookie disabili in loro browser, ma allora perché lo fa si presenta con CSRF_COOKIE nella sezione META?

Grazie per il vostro aiuto!

Brandon

+0

Mi sto imbattendo in questo stesso identico problema. Hai mai trovato una soluzione? –

+0

Sort of. Il problema era che alcuni utenti avevano i cookie disattivati ​​e non c'è modo di risolverli dal lato server. Abbiamo finito per disattivare la protezione CSRF per il modulo pubblico. Non farlo per pagine di accesso o altri dati sensibili, ma la protezione CSRF non è sempre strettamente necessaria. – brandon

risposta

0

è HTTP_COOKIE anche in bianco?

Potrebbe essere il django non vede un cookie token CSRF nella richiesta e sta generando un nuovo CSRF_COOKIE e lo inserisce in meta.

Problemi correlati