WordPressは世界で多くの利用者がいるオープンソースのコンテンツ管理システム(CMS)です。
一方で脆弱性もたくさん公開されています。
利用者が多い&脆弱性も多いシステムなので攻撃者の格好の攻撃対象にもなりやすいと言えるでしょう。
WordPressのリスクを理解し攻撃されないようにセキュリティ強化&対策をしていけば安全に運用できることが可能です。
今回、WordPressのセキュリティ強化&対策の一つの手段としてHTTPセキュリティヘッダを追加することで、WordPressへの攻撃や脆弱性を軽減する方法をご紹介します。
HTTPセキュリティヘッダとは
セキュリティヘッダとは、Webブラウザでのセキュリティ対策を設定するためにWebアプリケーションで使用されるディレクティブです。ブラウザはこれらのディレクティブに基づき、クロスサイトスクリプティングやクリックジャッキングなど、クライアント側の脆弱性を利用するのを困難にすることができます。また、ヘッダを使用すると、有効なTLS通信のみを許可したり、有効な証明書の使用を強制したり、特定のサーバ証明書の使用を強制したりするようにブラウザを設定することもできます。
まずは以下のサイトから自分のサイトの状況をチェックしましょう。
▼チェックサイト
https://securityheaders.com/
https://rakko.tools/tools/26/
.htaccessに以下のソースコードをコピペ
.htaccessのファイルをイジる時は最初にバックアップとりましょう。
その後、ドメイン直下にある.htaccess内に追記します。
以上となります。
1 2 3 4 5 6 7 |
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 |
ざっくり説明
1行目:HSTSの設定
1 |
Header always set Strict-Transport-Security: "max-age=31536000" env=HTTPS |
サイトを常時SSL化していてもhttpでアクセスされる場合があります。
httpでアクセスされると攻撃者を受ける可能性があります。
このようなことを回避するために、httpにアクセスされたら強制的にhttpsへ接続するように指示するセキュリティ対策。
2行目:Content-Security-Policyの設定
1 |
Header always set Content-Security-Policy "upgrade-insecure-requests" |
常時SSL化したのに、サイト内の画像などにhttp://から始まるソースがあると、ブラウザは「これは安全なWebサイトではない」と認識してしまいます。
そういった場合であってもブラウザがhttp://→https://としてくれるようになります。
3行目:X-Content-Type-Optionsの設定
1 |
Header always set X-Content-Type-Options "nosniff" |
ブラウザによるコンテンツタイプの自動判別機能を悪用してスクリプトを実行されるXSS(クロスサイト・スクリプティング)などの攻撃を受ける脅威を防ぐセキュリティ対策。Content-Type指定を無視してコンテンツを扱う事を禁止するための設定。
4行目:X-XSS-Protectionの設定
1 |
Header always set X-XSS-Protection "1; mode=block" |
ブラウザがXSS(クロスサイト・スクリプティング)フィルターの機能を有効にし、XSS攻撃が反映されたページを見つけたらフィルター機能を有効化させて、その読み込みをブロックするセキュリティ対策。
0 は無効
1 は有効
mode=block は攻撃を検知した際に応答しない
5行目:Expect CTの設定
1 |
Header always set Expect-CT "max-age=7776000, enforce" |
証明書の透明性(CT)についてWebサーバーとの接続を検証するようにブラウザーに指示する。
6行目:Referrer Policyの設定
1 |
Header always set Referrer-Policy: "no-referrer-when-downgrade" |
リンク元がhttpsで、リンク先がhttpでジャンプする時はリファラーを送信しない設定。
7行目:X-Frame-Optionsの設定
1 |
Header always append X-Frame-Options SAMEORIGIN |
主にClickjacking(クリックジャッキング)という攻撃を防ぐためにのセキュリティ対策。
ブラウザが他のサイトのフレームを呼び出さないように制御します。
ただし、自分で生成した時は許可します。
プラグイン導入でもOK
プラグインでも同じようなことが対策可能です。
例えば「HTTP Headers」とか。
まとめ
.htaccessにコピペで追記するだけでWordPressのセキュリティが少なからず強化されるのでお勧めです!