HSTSとは何ですか?

HSTSは、Webセキュリティ応答ヘッダーです。 この名前は「HTTPStrictTransportSecurity」の頭字語です。 HSTSヘッダーの機能は、ブラウザーがHTTPSを使用してWebサイトに接続するように強制することです。

ヒント:HTTPSは暗号化を使用して、Web接続を変更または監視しようとするハッカーからWeb接続を保護します。 HTTPにはこれらの保護がないため、適切な場所にいるハッカーがHTTPトラフィックを監視および変更する可能性があります。

Web応答ヘッダーは、サーバーがWeb要求に応答するときにサーバーによって送信されるメタデータの一部です。 これらのヘッダーのサブセットは、Webサイトとユーザーのセキュリティを強化することを目的としているため、セキュリティヘッダーと呼ばれることがよくあります。

HSTSヘッダーには、2つの必須部分と2つのオプション部分があります。 ヘッダー名「Strict-Transport-Security」、次に「max-age」演算子と値の両方が必須です。 別の演算子のペアである「includeSubDomains」と「preload」も使用されることがあります。

ブラウザがHSTSヘッダーを含むHTTPS応答を受信すると、「max-age」タイマーの期間中、HTTPSのみを使用して、このWebサイトとその上のすべてのリソースに接続するように指示されます。 「max-age」は、ブラウザが設定を記憶する必要がある期間を表す変数です。 「max-age」の値は秒単位で表示され、推奨値は「31536000」(1年)です。

アイデアは、後続のページの読み込みごとにリセットされるこのタイマーの期間内に、ブラウザはHTTPS接続を必要とし、HTTPリソースを拒否するというものです。 これは、あなたとWebサーバーの間のハッカーがあなたが受け取る応答を操作できる中間者攻撃から保護します。

これがあなたを保護する主なポイントは、最初の接続です。 通常、Webサイトに接続するときに、HTTP Webサイトを要求してから、HTTPSWebサイトに転送することができます。 残念ながら、中間者の立場にあるハッカーは、このHTTPSへのアップグレードを阻止し、Webサイトでのアクティビティを盗んだり監視したりする可能性があります。 ただし、HSTSヘッダーがブラウザに表示されると、ブラウザはHTTPSを介した最初の接続でさえも確立し、ハッカーからユーザーを保護します。

HSTSは、安全でないリソースが読み込まれるのを防ぎます。これらのリソースがHTTP経由で配信された場合、攻撃者によって悪意を持って変更される可能性もあります。

「includeSubDomains」演算子は、ヘッダーがWebサイトのすべてのサブドメインにも適用される必要があることを示すために使用されます。

HSTSプリロードリスト

Webサイトに初めて接続したときに、HSTSがまだ保護されていないことに気付くかもしれません。 これが「プリロード」演算子の出番です。 Webサイトは、HSTSプリロードリストに含めるために自分自身を送信できます。この場合、「プリロード」演算子は必須のインジケーターです。 HSTSプリロードリストは定期的に更新され、ブラウザに保存されます。サイトが含まれている場合、ブラウザはHSTS保護を適用します。 これは、ブラウザがHSTS応答ヘッダーを認識できるようになる前の最初の接続でも発生します。

ヒント:HSTSプリロードリストに1年以上の「最大年齢」を追加する必要があります。

HSTSに関する問題

HSTSの主なポイントの1つは、HTTPS接続に問題がある場合にエラーメッセージを表示することです。 追加のセキュリティ対策として、ユーザーは通常のHTTPSエラーでバイパスできるため、HSTSエラーメッセージをバイパスできないようになっています。

残念ながら、企業がWebサイト全体の前にHSTSを展開し、そこで使用されるすべてのリソースがHTTPSをサポートしている場合、これにより問題が発生する可能性があります。 この場合、ユーザーはバイパスできないHSTSセキュリティエラーメッセージを目にし始め、本質的にWebサイトを完全に破壊します。 最悪の部分は、HSTSヘッダーを削除するだけでは問題が解決しないことです。これは、ユーザーのブラウザが数か月に及ぶ可能性のある「最大年齢」に対してHSTSを適用し続けるためです。

そのため、ヘッダーを最初にデプロイするときに短い「max-age」を使用することが非常に重要です。 問題がある場合は、発見されてから短時間しか持続しません。 ウェブサイトが完全にHSTSに準拠していると確信した場合にのみ、長いHSTSタイマーを設定する必要があります。

ヒント:「max-age」を0に設定することもできます。これにより、保存されたHSTSエントリが表示されたすべてのユーザーから削除されます。 これは問題がある場合に役立ちますが、ユーザーが再試行することを決定した場合にのみ影響します。