WordPressサイトのセキュリティが正しく設定されていることは、特にハッカーから身を守る場合に非常に重要です。サイトが確実に保護されるための機能強化や最高のWordPressのセキュリティ慣行が多いです。WordPressサイトがHTTPSを使用している場合、お勧めの拡張機能の一つはHSTSセキュリティヘッダーです。これは、中間者攻撃(Man In The Middle Attack、省略MitM)とクッキーハイジャックの防止に役立ちます。

HSTS(Strict Transport Security)とは?

HSTSはHTTP Strict Transport Securityの略であり、2012年にRFC 6797でインターネット技術特別調査委員会(Internet Engineering Task Force、省略IETF)によって指定されました。サイトがHTTPSを使用している場合にブラウザーに安全な接続を使用させる手段として作成されたHSTSは、ウェブサーバーに追加するセキュリティヘッダーであり、応答ヘッダーでは「Strict-Transport-Security」として表示されます。HSTSは次の問題に対処するため重要です。

  • 訪問者がサイト上のページの保護されていないバージョン(HTTP://)を使用しようとすると、自動的に保護されたバージョン(HTTPS://)に転送されます。
  • 古いHTTPのブックマークや、サイトのHTTPバージョンを入力している人は、中間者攻撃の要因になる恐れがあります。中間者攻撃とは、攻撃者が犠牲者間のメッセージを中継し、犠牲者にはお互いに対話していると思わせる攻撃です。
  • 無効な証明書メッセージの上書きを許可しないため、訪問者は保護されます。
  • クッキーハイジャック:安全でない接続を介してセッションクッキーを盗んだ場合に発生する攻撃です。クッキーには、クレジットカード情報、名前、住所などの貴重な情報が含まれている場合があります。

WordPressサイトにHSTSを追加するには

本来ならば、HSTSをウェブサーバー自体に追加することにより、WordPressサイトへのHTTPリクエストに適用されます。通常、HTTPからHTTPSへのリダイレクトを実行すると、301リダイレクトが追加されます。Googleは、301サーバーリダイレクトとHSTSヘッダーを一緒に使用できると公式発表しています。

Google のシステムではデフォルトで HTTPS バージョンが優先されますが、HTTP サイトを HTTPS バージョンにリダイレクトしたり、サーバー上に HSTS ヘッダーを実装することで、他の検索エンジンでも HTTPS バージョンを明示的に優先させることができます。 Google Security TeamのZineb Ait Bahajji

HSTSヘッダーに適用できるディレクティブやセキュリティのレベルにはさまざまな種類があります。以下は、最も基本的なもので、max-ageディレクティブを使用しています。これは、ウェブサーバーがHTTPSのみで配信する時間を秒単位で定義します。

ApacheでHSTSを有効にする

次のコードを仮想ホストファイルに追加します。

Header always set Strict-Transport-Security max-age=31536000

NGINXでHSTSを有効にする

次のコードをNGINX設定ファイルに追加します。

add_header Strict-Transport-Security "max-age=31536000";

HSTSヘッダーをWordPressサイトに追加したいKinstaのお客様には、サポートチケットを開いていただくと、当社のスタッフはすぐに追加します。HSTSヘッダーを追加することによりパフォーマンスが向上します。ユーザーがHTTPを使用してサイトにアクセスしようとした場合、HTTPリクエストが行われずに、HTTPSバージョンにリダイレクトされます。

HSTSのプリロード

HSTSのプリロードというものもあります。これは基本的に、ウェブサイトまたはドメインをブラウザーに組み込まれている承認済みのHSTSリストに登録する制度です。HSTSプリロードリストはGoogleにより作成され、Chrome、Firefox、Opera、Safari、IE11、およびEdgeで採用されています。HSTSプリロードリストにサイトを登録しましょう。

HSTSのプリロード
HSTSのプリロード

ただし、資格を取得するには、追加要件を満たす必要があります。

  1. サーバーには有効なSSL / TLS証明書が必要です。(TLSとSSL:違いは何でしょうか?
  2. すべてのトラフィックはHTTPSにリダイレクトされています。
  3. HSTSをベースドメインで配信します。
  4. すべてのサブドメインをHTTPSで配信します。特に、wwwサブドメインがあれば含めましょう。
  5. 有効期限は少なくとも1年(31536000秒)である必要があります。
  6. includeSubdomainsトークンディレクティブを指定する必要があります。
  7. preloadトークンディレクティブを指定する必要があります。

これを行うには、追加のサブドメインとプリロードディレクティブをHSTSヘッダーに追加します。以下は、更新されたHSTSヘッダーの例です。

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

注意事項: ドメインをプリロードリストから削除することは困難で時間のかかるプロセスである場合があるため、今後は必ずHTTPSを使用していることにしてください。

HSTSヘッダーの検証

HSTSがWordPressサイトで機能しているかどうかを確認する簡単な方法がいくつかあります。例えば、Google Chrome Devtoolsを起動し、「Network」(ネットワーク)タブをクリックして、ヘッダータブを確認できます。以下の画像の通り、Kinstaのウェブサイトには「strict-transport-security:max-age = 31536000」というHSTS値が適用されています。

http応答strict transport security

strict-transport-securityヘッダーが適用されているかどうかを通知するsecurityheaders.ioなどの無料のオンラインツールを使用してWordPressサイトをスキャンすることもできます。

セキュリティヘッダーをスキャンする

HSTSのブラウザサポート

Caniuseによると、HSTSのブラウザーサポートは非常に普及しており、全世界で80%以上、米国では95%以上です。IE11にはHSTSのサポートは2015年に追加され、最新のブラウザーの中で現在HSTSをサポートしていないものはOpera Miniのみです。

HSTSのブラウザサポート

または、Tim KadlecのHSTSとLet’s Encryptについてのこちらの記事もお勧めします。

HSTSのSEOへの影響

ウェブサイトが承認されてHSTSプリロードリストに記載されると、Google Search ConsoleなどのサードパーティのSEOツールで307リダイレクトに関する警告メッセージが発生する場合があります。これは、ユーザーがHTTPを使用してサイトにアクセスしようとすると、ブラウザーでは301リダイレクトではなく、307リダイレクトが発生するためです(以下を参照)。

HSTS – Strict-Transport-Security の307リダイレクト
HSTS – Strict-Transport-Security の307リダイレクト

307リダイレクトは通常、一時的なリダイレクトにのみ使用されます。完全に移動されたURLには、301リダイレクトが使用されます。では、301リダイレクトを使用すべきではないでしょうか?そして、SEOへの影響はどうなるのでしょうか?

実は、舞台裏で301リダイレクトが行われています。307リダイレクトは、サーバーレベルではなく、ブラウザーレベルで行われています。httpstatusなどのサーバーレベルでリダイレクトを確認するツールを使用しすると、301リダイレクトが行われていることがわかります。 したがって、HSTSヘッダーがSEOに影響を与えることを心配する必要はありません。

HSTS の301リダイレクト
HSTS の301リダイレクト