Django1.8で増えた機能でSecurityMiddlewareというものがあります。
何ができるのか把握しておきたかったので調べていました。
django.middleware.security.SecurityMiddleware
コードはこのあたり。
django/security.py at stable/1.8.x · django/django · GitHub
以下の内容は、Django1.8のドキュメントとコードを元に記述しています。
概要
SecurityMiddlewareは、Djangoアプリケーションへのリクエスト、レスポンスに対していくつかのセキュリティ強化を施します。
具体的には以下のような機能があります。
- HTTP Strict Transport Security (HSTS) ヘッダの付与
- X-Content-Type-Options: nosniff ヘッダの付与
- X-XSS-Protection: 1; mode=block ヘッダの付与
- HTTPSスキームのURLへのリダイレクト機能
各機能は独立して有効、無効を設定できるようになっています。
HTTP Strict Transport Securityヘッダの付与
settings.SECURE_HSTS_SECONDSに秒数を設定すると、リクエストがHTTPSの場合に「strict-transport-security」ヘッダがレスポンスに付与されます。この際、max-ageはSECURE_HSTS_SECONDSの値になります。
settings.SECURE_HSTS_INCLUDE_SUBDOMAINSにTrueを設定すると、ヘッダの最後に「includeSubDomains」を追加で付与します。
X-Content-Type-Options: nosniff ヘッダの付与
settings.SECURE_CONTENT_TYPE_NOSNIFFにTrueを設定すると、「x-content-type-options: nosniff」ヘッダがレスポンスに付与されます。
X-XSS-Protection: 1; mode=block ヘッダの付与
settings.SECURE_BROWSER_XSS_FILTERにTrueを設定すると、「x-xss-protection: 1; mode=block」ヘッダがレスポンスに付与されます。