HTTP Strict Transport Security(HSTS)を解説
HTTP Strict Transport Security(HSTS)は、あなたのサイトに常にHTTPSでのみ接続するようブラウザに指示する応答ヘッダーです。一度認識すると、ブラウザはポリシーの有効期間中、あなたのドメインへのプレーンHTTP接続を拒否します。
これは何か
HSTSは Strict-Transport-Security ヘッダーで配信されます。例:max-age=31536000; includeSubDomains; preload。max-age は、ブラウザがこのルールを覚えておく時間(秒)です。
最初のHTTPSアクセス以降、ブラウザは以後のすべてのリクエストを自動的にHTTPSにアップグレードします。ユーザーがうっかり安全でないバージョンにアクセスすることはなく、攻撃者が接続をHTTPに戻すこともできません。
なぜ重要か
HSTSがないと、ユーザーの最初のリクエスト(yourdomain.com と入力)はプレーンHTTPで送られ、HTTPSへのリダイレクトが起きる前に傍受される可能性があります——典型的なSSLストリッピング攻撃です。
弱いHSTSポリシーは保護を損ないます。短い max-age は強制の有効期間を縮め、includeSubDomains を省くと、すべてのサブドメインがダウングレードにさらされたままになります。
直し方
長い max-age(1年)を使い、サブドメインもカバーし、preload にも登録しましょう。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadincludeSubDomains と preload を追加するのは、すべてのサブドメインが有効なHTTPSを配信していることを確認してからにしてください。さもないと、準備ができていないサブドメインからユーザーを締め出してしまう可能性があります。
ヘッダーに 'preload' が含まれたら、hstspreload.org でドメインを登録し、ブラウザが最初のアクセスからHTTPSを強制するようにしましょう。
FAQ
max-age はどれくらいにすべきですか?
少なくとも15552000(6か月)です。31536000(1年)が一般的な推奨値で、preloadリストには必須です。
HSTSで自分のサイトから締め出されることはありますか?
後からHTTPで配信する必要が生じたり、HTTPSのないサブドメインがあったりする場合に限ります。includeSubDomains や preload を有効にする前に、十分にテストしてください。