DjangoでWebサイトのセキュリティを強化! settings.SECURE_HSTS_SECONDSの使い方をわかりやすく解説


settings.SECURE_HSTS_SECONDS は、Django のセキュリティ設定の一つで、HTTP Strict Transport Security (HSTS) ヘッダーの有効期限を秒単位で設定します。HSTS は、ブラウザに対して、特定のドメインへのアクセスは常に HTTPS 接続で行うように指示するセキュリティ機能です。

設定方法

settings.py ファイルに以下の行を追加することで、HSTS ヘッダーを有効化できます。

SECURE_HSTS_SECONDS = 31536000  # 1 年間 (秒単位)

上記の例では、HSTS ヘッダーの有効期限が 1 年 (31536000 秒) に設定されます。

詳細

  • HSTS ヘッダーの有効期限が切れた場合、ブラウザは再び HSTS ヘッダーを要求します。
  • ブラウザは、HSTS ヘッダーを受信すると、そのドメインへのすべての後続アクセスを HTTPS 接続で行うように設定されます。
  • HSTS ヘッダーは、ブラウザが初めてドメインにアクセスしたときに送信されます。
  • HSTS ヘッダーの有効期限を短くすると、セキュリティが向上しますが、ブラウザのパフォーマンスが低下する可能性があります。
  • HSTS ヘッダーを有効にした後、HTTP でドメインにアクセスしようとすると、ブラウザはエラーを表示します。
  • HSTS ヘッダーを有効にする前に、すべてのページが HTTPS で提供されていることを確認する必要があります。
  • settings.SECURE_HSTS_PRELOAD 設定を使用して、HSTS ヘッダーを preload リストに追加することができます。
  • settings.SECURE_HSTS_INCLUDE_SUBDOMAINS 設定を使用して、サブドメインにも HSTS ヘッダーを適用することができます。


# settings.py ファイル

SECURE_HSTS_SECONDS = 31536000  # 1 年間 (秒単位)

サブドメインにも HSTS ヘッダーを適用する

# settings.py ファイル

SECURE_HSTS_SECONDS = 31536000  # 1 年間 (秒単位)
SECURE_HSTS_INCLUDE_SUBDOMAINS = True

HSTS ヘッダーを preload リストに追加する

# settings.py ファイル

SECURE_HSTS_SECONDS = 31536000  # 1 年間 (秒単位)
SECURE_HSTS_PRELOAD = True
  • 実際のコードは、プロジェクトの要件に合わせて調整する必要があります。
  • 上記のコードは、Django バージョン 5.0 を前提としています。
  • settings.SECURE_HSTS_PRELOAD 設定を使用して、HSTS ヘッダーを preload リストに追加することができます。
  • settings.SECURE_HSTS_INCLUDE_SUBDOMAINS 設定を使用して、サブドメインにも HSTS ヘッダーを適用することができます。


Djangoのsettings.SECURE_HSTS_SECONDS設定は、HSTS(HTTP Strict Transport Security)ヘッダーの有効期限を秒単位で設定することで、Webサイトのセキュリティを強化します。しかし、状況によってはsettings.SECURE_HSTS_SECONDS以外にも、HSTSを有効にする代替手段が存在します。

代替手段

  1. Webサーバーの設定:
    • NginxやApacheなどのWebサーバーでHSTSモジュールを有効化することで、HSTSヘッダーを直接設定できます。
    • この方法は、Djangoの設定ファイルを変更する必要がなく、より柔軟な制御が可能です。
  2. CDN(Content Delivery Network):
    • CloudflareやFastlyなどのCDNでHSTS設定を有効化することで、CDN経由で配信されるすべてのコンテンツにHSTSヘッダーを適用できます。
    • この方法は、グローバルな配信環境でHSTSを簡単に有効化したい場合に有効です。
  3. サードパーティ製ライブラリ:
    • hstsdjango-secure-hstsなどのサードパーティ製ライブラリを使用することで、settings.SECURE_HSTS_SECONDS設定よりも詳細なHSTS設定が可能になります。
    • 例えば、特定の条件下でのみHSTSを有効化したり、異なる有効期限を設定したりすることができます。
代替手段利点欠点適用例
Webサーバーの設定- Django設定ファイルの変更不要<br>- 柔軟な制御が可能- Webサーバーの設定に精通している必要がある- 大規模なWebサイト<br>- 複雑なHSTS設定が必要な場合
CDN- 簡単な設定<br>- グローバルな配信に最適- CDN利用料が発生- 静的コンテンツ配信にHSTSを適用したい場合
サードパーティ製ライブラリ- 詳細な設定が可能- 設定が複雑になる場合がある- 特殊なHSTS設定が必要な場合