Django 1.8 プロジェクト用にサイト全体の HTTPS をセットアップしています。私は Web セキュリティの経験がありません。
HTTP から HTTPS へのリダイレクトと HSTS をセットアップしています。
現在、Apache/mod_wsgi Web サーバーでこれを構成していました (PaaS を使用しているため、WSGI ルートの .htaccess ファイルを介して構成します)。
wsgi/.htaccess
# Redirect HTTP to HTTPS
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
# Add HSTS header
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
# Deny rendering inside an iframe
Header always set X-Frame-Options DENY
Django の公式ドキュメントの SSL推奨事項に従って、本番環境の設定で Cookie を保護しています。
設定/prod.py
...
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
...
注:SECURE_PROXY_SSL_HEADER = (“HTTP_X_FORWARDED_PROTO”, “https”)
まだ設定していません。PaaS がプロキシーと Web コンテナーの間でこのヘッダーをプロキシーして除去しているかどうかまだわからないからです。
Django (1.8 以降)には、SSL リダイレクトを実装し、HSTS ヘッダーやその他の便利なものを処理する (古い django-secure からの)セキュリティ ミドルウェアが付属しています。
Django にすべての HTTPS リダイレクト/HSTS 構成を処理させるべきですか、それとも Web サーバー レベルで処理させるべきですか? それぞれの選択のセキュリティ/パフォーマンスへの影響は何ですか?
参照/使用された参照:
https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
https://garron.net/crypto/hsts/hsts-2013.pdf
https://mozilla.github.io/server-side-tls/ssl-config-generator/
http://www.marinamele.com/2014/09/security-on-django-app-https-everywhere.html
https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html