HSTS (HTTP Strict Transport Security) とは、 Web サーバーがブラウザに対して「以降のアクセスはすべて HTTPS で行ってください」と指示するセキュリティ機構です。 Strict-Transport-Security HTTP レスポンスヘッダーで設定し、 RFC 6797 で標準化されています。
HSTS が解決する問題は、 HTTP から HTTPS へのリダイレクト時に発生する中間者攻撃 (MITM) のリスクです。ユーザーが http://example.com にアクセスすると、サーバーは https://example.com にリダイレクトしますが、この最初の HTTP リクエストは暗号化されていないため、攻撃者に傍受される可能性があります。 HSTS が設定されたサイトでは、ブラウザが HTTP アクセスを自動的に HTTPS に変換するため、暗号化されていない通信が一切発生しません。
HSTS ヘッダーの設定例は Strict-Transport-Security: max-age=31536000; includeSubDomains; preload です。 max-age はポリシーの有効期間 (秒、 31536000 = 1 年) 、 includeSubDomains はサブドメインへの適用、 preload はブラウザの HSTS プリロードリストへの登録申請を示します。プリロードリストに登録されると、ユーザーが一度もサイトにアクセスしていなくても HTTPS が強制されます。
HSTS 導入時の注意点として、 HTTPS の設定に問題がある状態で HSTS を有効にすると、サイトにアクセスできなくなるリスクがあります。まずは max-age を短く (例: 300 秒) 設定してテストし、問題がないことを確認してから段階的に延長するのが安全です。関連書籍は Amazon でも探せます。