なぜ「WordPress バージョン情報を隠す」とセキュリティが上がるのか
まず前提として、WordPress はデフォルトの状態だと「自分のバージョン番号」をけっこうあちこちでベラベラしゃべります。
ページのソースを開くと、こんな感じのタグが入っていたりします。
<meta name="generator" content="WordPress 6.x.x" />
さらに、wp-includes のスクリプトやCSSのURLに、こんなクエリが付いていることもあります。
/wp-includes/js/wp-embed.min.js?ver=6.x.x
つまり、攻撃者がページのHTMLやソースを少し見るだけで、
「このサイトは WordPress の 6.x.x を使っているな」
と分かってしまうわけです。
ここで問題になるのは、
「そのバージョンに既知の脆弱性があるかどうか」
を攻撃者が簡単に調べられてしまう、という点です。
攻撃者は「バージョン情報」をどう利用するのか
既知の脆弱性と“照合”される
攻撃者は、こんな流れでサイトを見てきます。
1つのサイトを開く
→ ソースを見て WordPress のバージョンを確認
→ そのバージョンに既知の脆弱性がないか調べる
→ あれば、その脆弱性専用の攻撃コードを投げる
つまり、バージョン情報が分かるということは、
「このサイトに効く“レシピ”を簡単に検索できる」
という状態です。
逆に言えば、バージョン情報を隠しておくと、
「このサイトにどの攻撃が効くのか」を特定しにくくなる
=攻撃の効率を下げられる
という効果があります。
「古いバージョン」を狙い撃ちされやすくなる問題
もしあなたのサイトが、少し古い WordPress を使っていて、
ソースに WordPress 5.x.x と書かれている
そのバージョンに既知の脆弱性がある
という状態だと、攻撃者からすると、
「このサイト、まだアップデートしてないじゃん。狙い目だな」
と判断されやすくなります。
もちろん、本質的には「ちゃんとアップデートすること」が最重要ですが、
「今どのバージョンかをわざわざ教えない」ことも、攻撃のハードルを上げる一手になります。
何をどう隠すのか(バージョン情報が出る場所)
1. <meta name="generator"> の削除
HTML の <head> 内に出てくる、これです。
<meta name="generator" content="WordPress 6.x.x" />
これは「このページは WordPress で作られていますよ」という自己紹介タグですが、
セキュリティ的には「バージョンまで教えなくていいよね」という存在です。
これを出さないようにすることで、
ソースを見ただけではバージョンが分からない状態にできます。
2. CSS・JS の ?ver=6.x.x をどうするか
WordPress は、CSS や JS を読み込むときに、
style.css?ver=6.x.x
script.js?ver=6.x.x
のように ver パラメータを付けることがあります。
これは本来、
キャッシュ制御(バージョンが変わったらブラウザに新しいファイルを取ってきてもらう)
という目的で付いていますが、
同時に「WordPress のバージョンっぽい数字」が漏れることもあります。
ここを完全に消すかどうかは運用次第ですが、
少なくとも「明らかに WordPress のコアバージョンをそのまま出す」のは避けたいところです。
実際にどうやって隠すのか(考え方のレベルで)
※ここでは「コードの書き方」ではなく、「何をやろうとしているか」のイメージを重視して説明します。
wp_head() からバージョン情報を出さないようにする
WordPress は、wp_head() というフックを通じて、
いろいろなタグ(meta, link, scriptなど)を <head> に出力します。
generator メタタグも、その一つです。
テーマの functions.php などで、
「generatorタグを出力する処理を外す」
ということをすると、<meta name="generator" ...> が出てこなくなります。
プログラミングの感覚で言えば、
「デフォルトで登録されているフックを remove する」
というイメージです。
バージョン付きクエリをどう扱うか
CSS や JS の ?ver= については、
完全に消す
WordPress のバージョンとは関係ない値にする
などのアプローチがあります。
ただし、ここはキャッシュ制御とも絡むので、
むやみに全部消す
→ 更新してもブラウザが古いファイルを使い続ける
という副作用もあり得ます。
なので、
「少なくとも WordPress のコアバージョンそのものは出さない」
というラインを意識しておくと良いです。
例題:バージョン情報あり・なしでの“見え方”の違い
Before:バージョン情報が丸見えの状態
ページのソースを開くと、
<meta name="generator" content="WordPress 6.3.1" />
<link rel='stylesheet' href='https://example.com/wp-includes/css/dashicons.min.css?ver=6.3.1' />
<script src='https://example.com/wp-includes/js/wp-embed.min.js?ver=6.3.1'></script>
攻撃者はこれを見て、
「このサイトは 6.3.1 だな。6.3.1 の脆弱性を調べよう」
と、すぐに動けます。
After:バージョン情報を隠した状態
ソースを開いても、
<meta name="generator"> が存在しない?ver= があっても、WordPress のコアバージョンとは関係ない値
という状態になっている。
攻撃者からすると、
「WordPress っぽいけど、バージョンはパッと見では分からないな」
という状況になります。
もちろん、完全に特定不可能になるわけではありませんが、
「一瞬で分かる状態」からは脱出できる、というのがポイントです。
重要な前提:「隠す」だけではダメ、でも“やらないよりは確実にマシ”
これだけで安全になるわけではない
ここは誤解してほしくないポイントです。
バージョン情報を隠したからといって、
古いバージョンのまま放置していい
アップデートしなくていい
という話には、絶対になりません。
本質的な防御は、
WordPress 本体を最新に保つ
プラグイン・テーマも最新に保つ
という「アップデート運用」です。
バージョン情報を隠すのは、
「もしアップデートが少し遅れたとしても、攻撃者に“狙い撃ちされにくくする”」
という、あくまで補助的な防御です。
それでも「やる価値がある」理由
セキュリティの世界では、
攻撃者に余計な情報を渡さない
というのは、かなり基本的で重要な考え方です。
バージョン情報を隠すのは、
「このサイトに効く攻撃を探す手がかり」を減らす
=攻撃の効率を下げる
という意味で、コストの割にリターンが大きい対策です。
やること自体は一度設定すれば終わりで、
その後ずっと効き続けるタイプの工夫なので、
「他のセキュリティ対策とセットで、静かに効いてくれる一枚」として考えると良いです。
プログラミングの感覚で捉える「バージョン情報を隠す」
これは「X-Powered-By を消す」のと同じ発想
Webアプリケーションでは、
X-Powered-By: PHP/8.1.0Server: Apache/2.4.57
のようなヘッダを消したり、
フレームワークのバージョンを隠したりすることがあります。
理由は同じで、
「このサーバーはこのバージョンのApacheです」
「このアプリはこのバージョンのフレームワークです」
と教えると、
それに対応した攻撃を探されやすくなるからです。
WordPress のバージョン情報も、まさにそれと同じで、
「わざわざ敵にヒントを渡さない」
という、エンジニアとしての基本的な防御姿勢の一つです。
まとめ:バージョン情報を隠すのは「敵にヒントを渡さない」ための小さな一手
「WordPress バージョン情報を隠す」というのは、
ソースやURLから WordPress の正確なバージョンを読み取られにくくする
=既知の脆弱性と“照合”されにくくする
という、情報非公開系のセキュリティ対策です。
押さえておきたいポイントは、
バージョン情報を隠しても、アップデートは必須
でも、隠しておくことで攻撃の効率を下げられる
一度設定すれば、静かに効き続けるタイプの対策
という3つです。
「どうせバレるかもしれないから意味ないでしょ?」ではなく、
「一瞬でバレる状態からは脱出しておく」——
このくらいの温度感で、他のセキュリティ対策と一緒に組み込んでいくのが、エンジニアとしてちょうどいいスタンスです。


