WordPress

WordPressサイトにHTTPセキュリティヘッダーを設定する方法

WordPressサイトにHTTPセキュリティヘッダーを設定する方法をまとめた備忘録記事です。

管理画面のサイトヘルスに「推奨セキュリティヘッダーがインストール済みではありません」という表示があって少し気になっていたため設定してみました(プラグイン『Really Simple SSL』が出力?)。

HTTPレスポンスヘッダーをセキュリティ目的で利用する”HTTPセキュリティヘッダー”は、適切に設定することで自分のサイトが攻撃に利用されるのを防いだり、訪問者の安全性を高めることができるようです。

設定は.htaccessファイルにコードを少し追加するだけで簡単なため、やっておくのも良いかもしれません。

スポンサーリンク
スポンサーリンク

設定方法について

【設定の流れ】
  1. Webツール「Security Headers」でサイトの状態を確認
  2. .htaccessファイルをダウンロード
  3. .htaccessファイルにレスポンスヘッダー用のコードを追記
  4. .htaccessファイルをアップロード
  5. Webツール「Security Headers」でサイトの状態を再確認

端的に言えば、.htaccessにコードを追記するだけです。
ということでやっていきましょう。

サイトの状態チェック

まずは、HTTPセキュリティヘッダーの状態を分析してくれるWebツール『Security Headers』『HTTPヘッダーセキュリティチェッカー』などを使用して、サイトの状態をチェック!

Analyse your HTTP response headers
Quickly and easily assess the security of your HTTP response headers
HTTPヘッダーセキュリティチェッカー:HTTPレスポンスヘッダからセキュリティ状況を確認 | ラッコツールズ🔧
ウェブサイトが、セキュリティ対策に有効的な下記の項目を含む推奨HTTPレスポンスヘッダーかを確認する事が出来ます。HTTP Strict Transport Security(HSTS)HTTP Public Key Pinning(HPKP)X-Frame-OptionsX-XSS-ProtectionX-Conte...
securityheaders.comでF判定

何も設定していないと低評価のF判定

.htaccessをダウンロード

まずは、FTPクライアントソフトを使って.htaccessをサーバーからダウンロードする。

FTPクライアントソフト

『FileZilla』や『ffftp』などのソフトを利用。

FileZilla - The free FTP solution
FileZilla - The free FTP solution for both client and server. Filezilla is open source software distributed free of charge.
GitHub - ffftp/ffftp: FTPクライアントソフトウェアです。
FTPクライアントソフトウェアです。. Contribute to ffftp/ffftp development by creating an account on GitHub.

.htaccessについて

ダウンロードするのは、WordPressがインストールされているルートフォルダ(ルートディレクトリ)にある.htaccessファイル

「wp-admin」や「wp-content」フォルダと同じ階層の.htaccessファイル。

追記するコード

Windows10のメモ帳も[BOM無し+LF]に対応したようだけど、使い勝手があまり良くないので他のエディタを使ったほうがいいかも。

簡単なコードを追記(コピペ)するだけので『TeraPad』や『サクラエディタ』あたりが軽くて便利。

TeraPad 公式ダウンロードサイト
HTML・CSS・JavaScript・Perl・PHP等の色分け・強調表示がプログラミング作業を支援します。ツールは、編集中のファイルを外部実行ファイルへ渡しコンパイル実行など工夫次第で様々な処理が可能です。
Sakura Editor
Japanese text editor for MS Windows
以下は2021年1月時点で調べた範囲での情報です。仕様変更により主要なブラウザでのサポートが打ち切られている項目もあるようなので要確認。

Strict-Transport-Security

Header always set Strict-Transport-Security: "max-age=31536000" env=HTTPS

HTTPの代わりにHTTPSを使って通信するようブラウザに指示する。

Content-Security-Policy

Header always set Content-Security-Policy "upgrade-insecure-requests"

HTTPとHTTPSのコンテンツが混在しているページで、強制的にHTTPSで読み込ませてセキュリティを強化する。

X-Content-Type-Options

Header always set X-Content-Type-Options "nosniff"

ファイル形式を誤認する可能性のあるMIME Sniffingを使わず、Content-Typeで判定することを強制することで、不正なスクリプトの実行を防止する。

X-XSS-Protection

Header always set X-XSS-Protection "1; mode=block"

クロスサイト・スクリプト攻撃(XSS攻撃)を防ぐためのXSS Filter機能。

[”1; mode=block”]で、機能を有効化、攻撃を検知したらブロックする。

Expect-CT

Header always set Expect-CT "max-age=7776000, enforce"

サイトのSSL証明書に間違いや不正がないかをパブリックCTログで確認するようブラウザに指示する。不正な発行を検知・防止することで信頼性・透明性を高める仕組み。

「max-age」で期間を秒指定。「enforce」でユーザーエージェント(ブラウザ)に認証透過性ポリシーに違反する接続を報告、拒否するよう指示する。

Referrer-Policy

Header always set Referrer-Policy: "no-referrer-when-downgrade"

セキュリティ水準が低下する[HTTPS→HTTP]のリファラーの送信をブロックする。

X-Frame-Options

Header always append X-Frame-Options SAMEORIGIN

Webブラウザがサイトをframe、iframe、embed、objectの中に表示する許可設定。「SAMEORIGIN」で同一ドメインのみに限定することでクリックジャッキングを防ぐ。

サイトを読み込む必要があるウェブツールを利用できなくなる等のデメリットがある。例えば、サイトのレスポンシブ表示を確認できるツール『Responsinator』。

追記例

.htaccessの編集について】
  • .htaccessの末尾に追記
    • (一部を除いて)本当はどこでも良いけど分かりやすいため
  • .htaccessの最後の行には「改行(空行)」が1行以上必要
  • 文字コードは「UTF-8」「BOMなし」、改行コードは「LF」で保存
# Security Headers
Header always set Strict-Transport-Security: "max-age=31536000" env=HTTPS
Header always set Content-Security-Policy "upgrade-insecure-requests"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Expect-CT "max-age=7776000, enforce"
Header always set Referrer-Policy: "no-referrer-when-downgrade"
Header always append X-Frame-Options SAMEORIGIN
# End Security Headers
「#」が先頭に付いている行はコメントアウト。省略・変更可。

上記コードを.htaccessファイルに追記して保存、サーバーの元の場所にアップロードすれば完了。

「Content-Security-Policy」と「Expect-CT」は、設定ミスによるダメージが怖かったので外していましたが、資料を確認して、とりあえず大丈夫そうだったので追加しました。
サイトが真っ白になって何も表示されなくなるのが怖いのです!

サイトの状態を再確認

.htaccessファイルをアップロードしたら分析サイトでHTTPセキュリティヘッダーの設定が適用されているか再確認!

securityheaders.comでB判定

『Security Headers』『HTTPヘッダーセキュリティチェッカー』で確認したところ、設定は正常に反映されているようだった。

ちなみに、設定を変更・無効にしたい場合は、.htaccessファイルに書き込んだ内容を修正・削除すればいい。

設定おつかれさまでした!

参考サイト

コード関連

Manually adding recommended security headers - Really Simple SSL
This article will explain how to manually add the recommended security headers to your website. For more advanced security headers or automatically add the secu...
WordPressにHTTPセキュリティヘッダーを追加する方法
もしあなたがWordPressのサイトを所有しているなら、Webサイトのセキュリティに注意すべきです。ブログやビジネス、オンラインストアの運営に成功するには、あなたのWebサイトが絶対に安全であることを確認する必要があります。その方法を教えます。
ワードプレスのセキュリティ対策としてHTTPレスポンスヘッダ 設定方法「securityheaders」のA評価の手順
WEBページやワードプレスのセキュリティ対策に必要な「HTTPレスポンスヘッダ 設定方法」を紹介します。 基本…

情報関連

HTTPレスポンスヘッダによるセキュリティ対策 - Qiita
HTTPレスポンスヘッダにつけることで セキュリティレベルが向上するヘッダフィールドについてまとめです。HTTPヘッダとは?参考サー...
HTTP ヘッダー - HTTP | MDN
HTTP ヘッダーにより、 HTTP リクエストやレスポンスでクライアントやサーバーが追加情報を渡すことができます。 HTTP ヘッダーは、大文字小文字を区別しないヘッダー名とそれに続くコロン (:)、 値で構成されます。値の前にあるホワイトスペースは無視されます。
Nginx設定の肝 - がとらぼ

プラグインで代替

HTTPヘッダーの設定が可能なプラグインもあるようです。.htaccessファイルの編集が面倒な場合はプラグイン利用も選択肢になると思います。

HTTP Headers
HTTP Headers adds CORS & security HTTP headers to your website.
HTTP headers to improve web site security
Use your HTTP header to improve security of your web site
スポンサーリンク
スポンサーリンク
この記事をシェアする
どんぱっぱをフォローする
スポンサーリンク
となはざな
コメントの通知/購読設定
受け取る通知
guest
0 Comments
Inline Feedbacks
View all comments
タイトルとURLをコピーしました