HSTSは、Webサイトの通信を強制的にHTTPS(暗号化通信)にするためのセキュリティ機能です。これまでの「サーバー側でのリダイレクト」よりも強力で、ブラウザレベルで安全な接続を保証します。
1. 究極の1行(設定コード)
Apacheの .htaccess やサーバー設定ファイルに記述する最強の設定値です。
.htaccess のなるべく上の方(RewriteEngine On の前後など)に以下を記述してください。
Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”
2. ディレクティブの詳細解説
- Header always set
- すべてのレスポンス(成功時だけでなくエラー時も)において、必ずこのヘッダーを送信することを意味します。
- max-age=31536000
- ブラウザが「このサイトはHTTPSで接続する」と記憶する期間です。31536000秒は1年間を意味します。この期間中、ユーザーが
http://でアクセスしようとしても、ブラウザ内部で自動的にhttps://に書き換えられます。 - includeSubDomains
- この設定をサブドメインすべて(例:0ch.yamada-lab.jpなど)にも適用させる命令です。ドメイン全体を一括で保護するために必須の項目です。
- preload
- Googleが主導する「HSTS Preload List」に登録するための宣言です。これがあると、初回訪問時ですらHTTP接続を許さず、最初からHTTPSで接続されるようになります(ブラウザにリストがハードコードされるため)。
3. なぜ「リダイレクト」だけでは不十分なのか?
一般的な銀行や官公庁が行っている「HTTP → HTTPSへのリダイレクト」には、一瞬の隙があります。
| 手法 | 脆弱性 / 特徴 |
|---|---|
| 301リダイレクトのみ | 最初の一瞬だけHTTP通信が発生するため、その隙に「中間者攻撃(通信の乗っ取り)」を受けるリスクがある。 |
| HSTS設定あり | ブラウザが最初からHTTPを選択肢から外すため、乗っ取りの隙が物理的に存在しない。 |
4. 導入時のチェックリスト
- SSL証明書が有効であること: HSTSを有効にした状態で証明書が切れると、ユーザーはサイトに一切アクセスできなくなります(警告を無視して進むこともできなくなります)。
- すべてのサブドメインがHTTPS対応済みであること:
includeSubDomainsを入れる場合、HTTPS化されていないサブドメインがあるとアクセス不可になります。 - まずは短いmax-ageでテスト: 最初は
max-age=3600(1時間)などでテストし、問題なければ1年間に延ばすのが安全です。
5. 管理者としてのまとめ
大手銀行やJRAが設定できていないこの1行を完璧に運用できていることは、技術的に非常に高度な管理が行われている証です。
この設定により、あなたのサイトは「利便性のための妥協」を排した、真に安全な要塞となります。