結論(生成ツール情報を露出していない)
生成ツール情報を露出していないとは、HTMLの head に、サイトを作ったCMSや生成ツールの製品名・バージョンを示す「meta name="generator"」タグを出力していない状態です。このタグは検索や表示には使われず、攻撃者が古いバージョンのサイトを機械的に選び出す手掛かりになります。セキュリティAIチェッカーは、値のあるgeneratorタグがトップページにあれば △ 要確認(重み1)と判定します。
この記事のポイント
- generatorメタタグはHTML標準の正当な用法ですが、製品名とバージョン番号を第三者に知らせてしまいます。
- 検索順位の評価には使われないため、削除しても表示・SEOへの影響はありません。
- 診断はトップページのmetaタグから name=generator を探し、値があれば △(重み1×0.45=0.45点)、なければ ○ です。
- 製品名だけでバージョン番号を含まない場合も △ とします。
- 削除は低コストな衛生対策で、本質的な対策はCMS本体・テーマ・プラグインを最新に保つことです。
| 診断項目名 | 生成ツール情報を露出していない |
|---|---|
| 項目ID | html.generator |
| 分類 | 公開ファイル・情報露出 |
| 重大度・配点の重み | 低(low) 重み 1 |
| 関連する標準・ガイドライン | OWASP ASVS 5.0.0 V13.4.6(バックエンド構成要素の詳細なバージョン情報を露出しない、L3)、OWASP WSTG-INFO-08(Webアプリケーションフレームワークのフィンガープリント)、WSTG-INFO-05、CWE-497(機密なシステム情報の権限外への露出)、CWE-200 |
生成ツール情報を露出していないとは(meta generatorタグの確認)
生成ツール情報を露出していないとは、サイトのHTMLに、ページを生成したCMSやサイト生成ツールの製品名・バージョンを示す「generator」メタタグを出力していない状態のことです。セキュリティAIチェッカーはこの項目(html.generator)で、トップページにgeneratorメタタグが存在しないかを確認します。
多くのCMSやサイト生成ツールは、HTMLの head 要素に次のようなタグを自動で出力します。
<meta name="generator" content="WordPress 6.5.2">
このタグは検索エンジンや閲覧者の表示には一切使われず、主に製品の利用統計や宣伝のために出力されています。一方で攻撃者にとっては、サイトがどの製品のどのバージョンで動いているかを一瞬で知る手掛かりになります。
| 項目 | 内容 |
|---|---|
| 項目ID | html.generator |
| 診断カテゴリ | 情報露出 |
| 重大度 | low |
| 重み | 1 |
| 関連標準 | OWASP ASVS 5.0.0 V13.4.6(L3)、OWASP WSTG-INFO-08、WSTG-INFO-05、CWE-497、CWE-200 |
| 関連項目 | 「サーバーバージョンを露出していない」、「下層・エラー応答のバージョン/デバッグ情報」 |
generatorメタタグはなぜ出力されるのか(HTML標準での位置付け)
HTML Living Standardは generator を標準のメタデータ名として定義しています。値は「文書の生成に使われたソフトウェアパッケージの1つを識別する自由形式の文字列」であり、テキストエディタで手書きしたページには使ってはならない(must not)とされています。
つまり、ソフトウェアが生成したページで出力すること自体は仕様上正当な用法です。セキュリティ上の問題は、タグの存在そのものよりも「製品名とバージョン番号」が第三者に知られる点にあります。
製品ごとの典型例(OWASP WSTG-INFO-08)
| 製品 | 出力例 |
|---|---|
| WordPress | <meta name="generator" content="WordPress X.X" /> |
| Drupal | <meta name="Generator" content="Drupal X (https://drupal.org)" /> |
| Joomla! | <meta name="generator" content="Joomla! - Open Source Content Management" /> |
| MediaWiki | <meta name="generator" content="MediaWiki X.X" /> |
| Ghost | <meta name="generator" content="Ghost X.X" /> |
このほか、静的サイト生成ツール(Hugo、Jekyll等)や、ホームページ作成ソフト、国内の自治体向けCMS製品も独自のgenerator値を出力することがあります。
generatorタグを消す意味と限界(フィンガープリント)
製品の推定は他の手段でも可能
generatorタグを消しても、Cookie名(wp-settings-* 等)、ディレクトリ構成(/wp-content/)、静的ファイルのハッシュ、HTTPヘッダーなどから製品を推定できます。OWASP WSTG-INFO-08も、これら複数の手掛かりによる特定手法(フィンガープリント)を解説しています。
したがって、generatorタグの削除は「製品の秘匿」ではありません。「バージョン番号を自動収集されにくくし、既知の脆弱性を持つサイトを機械的に選別されるリスクを下げる」ための低コストな衛生対策と位置付けるのが正確です。
generatorタグについてよくある誤解
- 「タグを消せば脆弱性対策は不要」:本質的な対策は製品とプラグインを最新に保つことです。バージョンを隠しても、古い製品の脆弱性はそのまま残ります。
- 「タグを消すとSEOに悪影響がある」:generatorは検索順位の評価に使われません。削除による表示・検索への影響はありません。
HTTPヘッダー(Server・X-Powered-By 等)でのバージョン露出は「サーバーバージョンを露出していない」で、トップページ以外での露出は「下層・エラー応答のバージョン/デバッグ情報」で確認します。このページの項目は、HTML内のgeneratorメタタグに限定した確認です。
生成ツール情報を露出していないの診断基準(セキュリティAIチェッカー)
取得対象
- 入力URLのGET(リダイレクト最大4回追跡)で得た最終ページのHTML本文(最大2,000,000バイト、テキスト系Content-Typeのみ)。
判定方法
- HTML中のすべてのmetaタグを抽出します(属性値に
<や>を含むタグは抽出されません)。 name属性の値がgenerator(大文字小文字を区別しない。引用符の有無も問わない)であるタグを探します。属性の順序(contentが先かnameが先か)には依存しません。- 最初に見つかったタグの
content値を取り出し、根拠欄に先頭80文字を表示します。
判定条件
| 判定 | 条件 | 得点への影響 |
|---|---|---|
| ○ 問題なし(pass) | name="generator" かつ値のあるmetaタグがない | 重み1を満点で加算 |
| △ 要確認(warn) | 上記のmetaタグがある(根拠欄に値を表示) | 重み1×0.45=0.45点 |
| (判定なし) | HTML本文を取得できない(非テキスト応答など) | 本項目は結果に出力されず、得点の分母にも入らない |
contentが空のタグは「値なし」として ○ になります。- 製品名だけでバージョン番号を含まない場合も △ とします。製品名だけでも攻撃対象の選別には使われるうえ、出力が不要なタグであるためです。ただし重み1・low の項目であり、総合スコアへの影響は小さく設計しています。
- トップページを含む巡回ページでの「数字(バージョン番号)を含む」generatorの露出は、関連項目「下層・エラー応答のバージョン/デバッグ情報」で別途評価します。
自治体サイトでの判定例
| 状況 | 判定 |
|---|---|
WordPressで構築し、テーマや設定を変更していない観光・移住サイト(WordPress 6.x が出力される) | △ |
| 商用の自治体向けCMSで、generatorを出力しない設定 | ○ |
| 静的HTMLを手作業で更新しているサイト | 通常 ○。ただし、ホームページ作成ソフトの出力が残っている場合は △ |
生成ツール情報を露出しているとどんなリスクがあるか
- 既知脆弱性を持つサイトの自動選別:攻撃者はインターネット全体を自動で巡回し、generatorの値から「脆弱性が公表された古いバージョン」を使うサイトを抽出してから攻撃を仕掛けます。バージョン情報は、この選別を極めて容易にします。
- 改ざん・不正プログラム設置の足掛かり:CMSやプラグインの脆弱性は、ページ改ざん、フィッシングページ設置、マルウェア配布の入口として悪用されてきました。
- 委託・運用体制の推測:製品名から委託先や運用方法が推測され、標的型の攻撃に使われる可能性があります。
ただし、generatorタグの存在そのものが侵入を許すわけではありません。リスクの本体は「古いバージョンのまま放置されていること」であり、本項目はその兆候を外部から見える形で示すものです。
generatorタグの削除方法(WordPress・Drupal・Hugo・商用CMS・Apache・nginx)
WordPress
テーマの functions.php(子テーマ推奨)または独自プラグインに追加します。
<?php
// HTMLの<meta name="generator">を出力しない
remove_action('wp_head', 'wp_generator');
// RSSフィード等に出力されるgeneratorも空にする
add_filter('the_generator', '__return_empty_string');
remove_action でHTML内のタグが消え、the_generator フィルターでフィード等の生成元表示も空になります。プラグイン(ページビルダー、SEO系等)が独自にgeneratorを出力する場合は、各プラグインの設定で無効化してください。
Drupal
Drupal 8以降はコアがHTTPヘッダー X-Generator とmetaタグを出力します。カスタムモジュールで hook_page_attachments_alter() を実装し、system_meta_generator を除去する方法が一般的です。
<?php
function mymodule_page_attachments_alter(array &$attachments) {
foreach ($attachments['#attached']['html_head'] ?? [] as $key => $item) {
if (($item[1] ?? '') === 'system_meta_generator') {
unset($attachments['#attached']['html_head'][$key]);
}
}
}
静的サイト生成ツール・商用CMS
- Hugo:テンプレートで
{{ hugo.Generator }}を出力している箇所を削除します。加えて、Hugoは既定でホームページ(トップページ)にgeneratorタグを自動挿入するため、サイト設定にdisableHugoGeneratorInject = trueを指定します。 - 商用CMS:管理画面の「メタ情報」「ヘッダー出力」設定や、テンプレートの head 部分で削除します。設定がない場合は保守事業者へ削除を依頼してください。
上記のCMS向けコード例(Drupalのフック、Hugoのテンプレート変数)は各製品のバージョンにより記述が異なる場合があります。適用前に、利用中のバージョンの公式ドキュメントで確認してください。
HTTPヘッダー側もあわせて確認
# Apache(mod_headers):X-Generator等の識別ヘッダーを除去
# ヘッダーの生成元(mod_php/CGI・FastCGI)により格納先が異なるため両方を指定
<IfModule mod_headers.c>
Header unset X-Generator
Header always unset X-Generator
Header unset X-Powered-By
Header always unset X-Powered-By
</IfModule>
# nginx:上流から来たヘッダーを隠す(FastCGI接続の場合はfastcgi_hide_header)
proxy_hide_header X-Generator;
proxy_hide_header X-Powered-By;
バージョン管理の本質対策
generatorの削除とあわせて、次の運用を整えることが重要です。
| 対策 | 内容 |
|---|---|
| 構成台帳 | CMS本体、テーマ、プラグイン、サーバーOS・ミドルウェアの製品名とバージョンを一覧化 |
| 脆弱性情報の収集 | JVN(Japan Vulnerability Notes)や製品の公式セキュリティ情報を定期確認 |
| 更新手順 | ステージング環境での検証 → 本番適用の手順と期限を保守契約に明記 |
| 不要機能の削除 | 使っていないプラグイン・テーマは無効化ではなく削除 |
確認方法(curl)
curl -s https://www.city.example.lg.jp/ | grep -io '<meta[^>]*generator[^>]*>'
curl -sI https://www.city.example.lg.jp/ | grep -iE '^(x-generator|x-powered-by|server):'
何も表示されなければ対応完了です。セキュリティAIチェッカーで再診断し、本項目が ○ になったことも確認します。
サイトを壊さないための注意点(ガードレール)
functions.phpを直接編集すると、テーマ更新で消えたり、構文エラーで画面が真っ白になったりします。子テーマか専用プラグインで追加し、ステージング環境で表示確認してから本番に反映してください。- generator削除はあくまで補助策です。CMS本体・テーマ・プラグインの自動更新や定期更新の体制を整えることを最優先にしてください。
よくある質問(FAQ)
meta generatorタグを削除するとSEOに悪影響はありますか?
ありません。generatorは検索順位の評価に使われず、閲覧者の表示にも使われないため、削除による表示・検索への影響はありません。
WordPressでgeneratorタグを消すにはどうすればよいですか?
子テーマの functions.php または独自プラグインに remove_action('wp_head', 'wp_generator') を追加します。RSSフィード等の生成元表示も消すには add_filter('the_generator', '__return_empty_string') を併用します。プラグインが独自に出力する場合は各プラグインの設定で無効化してください。
generatorタグを消せばCMSの種類は分からなくなりますか?
分からなくなるわけではありません。Cookie名、/wp-content/ などのディレクトリ構成、静的ファイルのハッシュ、HTTPヘッダーなどからも製品は推定できます。削除の効果は、バージョン番号を自動収集されにくくし、古いサイトとして機械的に選別されるリスクを下げることです。
バージョン番号を含まない製品名だけでも △ になりますか?
なります。製品名だけでも攻撃対象の選別には使われるうえ、出力が不要なタグだからです。ただし重み1・lowの項目で、総合スコアへの影響は小さく設計しています。
content が空のgeneratorタグはどう判定されますか?
content が空のタグは「値なし」として ○ 問題なしになります。△ になるのは、name が generator で値のあるmetaタグがある場合です。
Hugoで作ったサイトのgeneratorタグを消すには?
テンプレートで {{ hugo.Generator }} を出力している箇所を削除し、さらにHugoが既定でトップページへ自動挿入するgeneratorを止めるため、サイト設定に disableHugoGeneratorInject = true を指定します。
この項目を含む127項目を、URLを入れるだけで無料診断します。
参考資料
- OWASP WSTG-INFO-08 Fingerprint Web Application Framework
- OWASP WSTG-INFO-05 Review Web Page Content for Information Leakage
- OWASP ASVS 5.0.0 V13 Configuration
- HTML Living Standard(standard metadata names: generator)
- WordPress Developer Resources wp_generator()
- Apache mod_headers(Headerディレクティブのonsuccess/always)
- JVN(Japan Vulnerability Notes)