HSTS
Webサイトが、HTTPの応答ヘッダーのStrict-Transport-Securityフィールドで、指定した期間はそのサイトへのアクセスを必ずHTTPSで行うように、Webブラウザに指示する仕組み。
イマシルちゃんの解説
ブラウザで「http://」のままサイトを開くと、最初の1回は、暗号化されていない通信になっちゃうことがあるんだ。
その一瞬をねらって、悪い人が通信を横取りすることもあるんだよ。
そこで、サイトが「これから1年間は、うちには必ず暗号化して来てね」ってブラウザにお願いしておくんだ。
ブラウザはそれを覚えていて、次からは、最初から暗号化した通信でアクセスしてくれるんだよ。
より深い解説
定義
HSTS(HTTP Strict Transport Security)は、RFC 6797で定められた仕組みである。HTTPSの応答に Strict-Transport-Security ヘッダーを付けると、ブラウザは、指定された期間、そのドメインへのアクセスを自動的にHTTPSに切り替え、証明書のエラーがあるときは、利用者が警告を無視して接続することもできなくする。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
| 指定 | 意味 |
|---|---|
| max-age | HTTPSを強制する期間(秒)。31536000秒は1年 |
| includeSubDomains | サブドメインにも適用する |
| preload | ブラウザにあらかじめ組み込まれる一覧(HSTSプリロードリスト)への登録を希望する |
防げる攻撃
利用者が http:// でアクセスしたり、HTTPのリンクをたどったりすると、HTTPSへ転送されるまでの最初の通信は暗号化されない。中間者は、ここでHTTPSへの転送を妨げ、利用者とHTTPのまま通信させることができる(SSLストリッピング)。HSTSを使うと、ブラウザが最初からHTTPSで接続するため、この攻撃を防げる。
ただし、初めてアクセスするときは、まだヘッダーを受け取っていないため守られない。プリロードリストに登録すると、初回のアクセスも守られる。
セキュリティに関する主な応答ヘッダー
| ヘッダー | 働き |
|---|---|
| Strict-Transport-Security | 指定した期間、HTTPSでのアクセスを強制する |
| Content-Security-Policy | 読み込んでよいスクリプトや画像などの取得元を制限し、XSSなどの被害を減らす |
| X-Content-Type-Options | nosniff を指定し、ブラウザが Content-Type を無視して内容から種類を推測するのを防ぐ |
| X-Frame-Options | ほかのサイトのフレームに表示させない(クリックジャッキングの対策) |
| X-XSS-Protection | 古いブラウザのXSSフィルタを有効にする(現在は使われない) |