2016-01-07 17 views
5

Ho aggiornato Django da 1,8 a 1,9. In seguito, ottengo questo errore sul mio localhost dopo l'accesso dell'amministratore di Django:Verifica CSRF non riuscita: il riferimento non è sicuro mentre l'host è protetto

Referer checking failed - Referer is insecure while host is secure.

Tutto funziona bene in produzione. Qui di seguito è un frammento del mio file settings.py:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 
SESSION_COOKIE_SECURE = True 
CSRF_COOKIE_SECURE = True 
+0

Immagino tu stia usando 'http' in fase di sviluppo. quindi l'app deve essere configurata per l'utilizzo di 'http' in' local.py' (o simile). – sobolevn

risposta

2

Quelle linee nel file settings.py vanno bene sulla produzione, perché si sta utilizzando un certificato SSL collegata al dominio. Tuttavia, in locale probabilmente stai usando http://localhost:8000 o qualcosa di simile. Se provi a connetterti tramite https://localhost:{{YOUR_PORT_NUMBER}} probabilmente avrai un errore come ERR_SSL_PROTOCOL_ERROR.

Il problema è nelle righe 167-168 di django/django/middleware/csrf.py. Quando si utilizza https in produzione, request.is_secure() restituisce True ... che richiede che anche lo HTTP_REFERER sia vero o che venga visualizzato l'errore a cui si fa riferimento.

Una soluzione potrebbe essere adjust your settings.py file depending on whether you're in your local or production environment. In questo modo è possibile aggiungere queste tre righe a un file settings_production.py che importa altre impostazioni comuni a localhost e al server di produzione. Il tuo localhost userebbe un diverso set di impostazioni che non includono quelle linee.

+0

Sì. Ho capito il tuo punto. prima di quelle righe che ho specificato nella mia domanda, c'è questa condizione 'if not ENVIRONMENT == 'localhost''. Significa che le righe che ho specificato nella mia domanda vengono eseguite solo in produzione. Quindi, cosa devo aggiungere alle mie impostazioni per prevenire questo errore? – Farcorn

+0

Giusto per controllare, se cancelli completamente quelle tre linee il sito funziona su 'localhost'? Qual è l'errore che succede poi? Il problema è che il meta tag 'HTTP_REFERER' non sta usando' https' su 'localhost'. Vedere le righe 167-168 di ['django/django/middleware/csrf.py'] (https://github.com/django/django/blob/master/django/middleware/csrf.py) – YPCrumble

+0

Continuo a ricevere lo stesso errore quando commento quelle tre righe. – Farcorn

Problemi correlati