リダイレクトの脆弱性
HTTPからHTTPSへのリダイレクトは、通常Webサーバの機能として処理します。
Apacheの場合は主で.htaccessにリダイレクトを実現可能です。
ただし、リダイレクト処理の場合、一度はHTTPで通信が発生してしまうため、データが平文で送信される危険性があります。
例えばCookieの場合で言うと、セッションIDにSecure属性が付いていなかった場合には、セッションIDを含むCookieが平文で送信されてしまいます。
HSTSとは
HSTSを利用した場合、初回アクセス時にWebサーバから、次回接続をHTTPSで行うように指定することができます。よって2回目以降の通信に関してはHTTPSを強制することが可能です。
典型的なHSTSの設定
HSTSの設定は、以下のようなHSTS用のHTTPヘッダを追加するだけです。
Strict-Transport-Security: max-age=31536000; includeSubdomains
上記の31536000は1年を表します。includeSubdomainsでサブドメインも対象にしています。
HSTS Preload
リダイレクトの場合、ユーザがHTTPでアクセスする度にデータが平文で送信されてしまいます。HSTSを使えば、HTTPでアクセスした場合において、データが暗号化されないのは初回接続時のみです。
逆に言えば、HSTSを使ったとしても、ユーザが一発目でHTTPSではなくHTTPで繋ぎに行った場合においては、データは平文で送信されてしまうということです。
これを防ぐために、HSTS Preloadという仕組みがあります。
以下の記事が分かりやすいです。要は、HSTS Preloadのリストに登録済みのサイトは、予めHTTPSで通信するようにブラウザに通知する仕組みです。Googleが取りまとめています。