2016-01-07 17 views
5

Djangoを1.8から1.9にアップグレードしました。その後、Django管理者のログイン後、私のローカルホストでこのエラーが発生します。CSRF検証に失敗しました - ホストが安全である間、Re​​fererが安全でない

Referer checking failed - Referer is insecure while host is secure

すべてが正常に動作します。以下 は私のsettings.pyファイルの抜粋です:

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

私は開発で 'http'を使っていると思います。したがって、あなたの 'local.py'(またはそれに類するもの)で' http'を使うようにアプリを設定する必要があります。 – sobolevn

答えて

2

あなたのドメインに接続SSL証明書を使用しているので、あなたのsettings.pyファイルにこれらの行は、生産上の罰金です。しかし、現地ではおそらくhttp://localhost:8000などを使用しています。 https://localhost:{{YOUR_PORT_NUMBER}}で接続しようとすると、おそらくERR_SSL_PROTOCOL_ERRORのようなエラーが発生します。

問題は、django/django/middleware/csrf.pyの167-168行目にあります。生産時にhttpsを使用している場合、request.is_secure()はも真であることが必要な場合はTrue ...を返すか、参照したエラーが発生します。

1つの解決策はadjust your settings.py file depending on whether you're in your local or production environmentです。こうすることで、localhostと本番サーバーの両方に共通するその他の設定をインポートするsettings_production.pyファイルにこれらの3行を追加することができます。ローカルホストは、これらの行を含まない別の設定を使用します。

+0

はい。私はあなたのポイントを得る。私の質問で指定した行の前には、 'ENVIRONMENT == 'localhost'でなければ、この条件があります。私の質問で指定した行は、実稼働環境でのみ実行されます。では、このエラーを防ぐために設定に何を追加する必要がありますか? – Farcorn

+0

チェックするだけで、3行を完全に削除すれば、サイトは 'localhost'で動作しますか?そのときに起こるエラーは何ですか?問題は、あなたの 'HTTP_REFERER'メタタグが' localhost'に 'https'を使用していないことです。 ['django/django/middleware/csrf.py']の167-168行を参照してください(https://github.com/django/django/blob/master/django/middleware/csrf.py) – YPCrumble

+0

私はまだ取得します私はそれらの3行をコメントアウトするときと同じエラー。 – Farcorn

関連する問題