結論(Webサーバー/CMSのデフォルトファイル)
Webサーバー/CMSのデフォルトファイルとは、WebサーバーやCMSがインストール直後の動作確認や説明のために用意しているアイコン一覧、README、サーバー情報ページなどのことです。代表例はApacheの /icons/ と /server-info、WordPressの /readme.html です。本番で公開されたままだと、使用ソフトウェアの種類やモジュール構成、設定内容が外部から分かり、攻撃者が既知の脆弱性を絞り込む材料になるため、削除するかアクセスを拒否します。
この記事のポイント
- Apacheの/icons/・/icons/README、mod_infoの/server-info、WordPressの/readme.htmlが代表的なデフォルトファイルです。
- 特に/server-infoは読み込みモジュールや設定ディレクティブ、設定ファイルのパスまで表示し、情報量が多くなります。
- リンクしていなくても直接URLを指定すれば閲覧でき、デフォルトパスは一般的な攻撃ツールや脆弱性スキャナーの辞書に含まれています。
- /icons/と/server-infoはサーバー設定で処理されるため、ドキュメントルートの.htaccessでは止められません。
- セキュリティAIチェッカーは4パスを確認し、HTTP 200かつ内容署名に一致するものが1件でもあれば×と判定します。
| 診断項目名 | Webサーバー/CMSのデフォルトファイル |
|---|---|
| 項目ID | public.server-default-artifacts |
| 分類 | 公開ファイル・情報露出 |
| 重大度・配点の重み | 中(medium) 重み 3 |
| 関連する標準・ガイドライン | OWASP ASVS 5.0.0 V13.4.2(本番環境でデバッグ機能を無効化/L2)・V13.4.5(内部向け文書や監視エンドポイントを意図せず公開しない/L2)・V13.4.6(バックエンドの詳細なバージョン情報を公開しない/L3)、OWASP WSTG-CONF-02(アプリケーション基盤の設定:既定・サンプル・既知ファイルの除去)、CWE-497(Exposure of Sensitive System Information to an Unauthorized Control Sphere)、CWE-1188、IPA「安全なウェブサイトの作り方」2.1(不要なサービスの停止、公開を想定しないファイルを置かない) |
Webサーバー/CMSのデフォルトファイルとは
Webサーバー/CMSのデフォルトファイルとは、Webサーバーやコンテンツ管理システム(CMS)が、インストール直後の動作確認や説明のために用意しているアイコン一覧、README、サーバー情報ページなどのファイルです。
本番運用でこれらが公開されたままだと、使用しているソフトウェアの種類、モジュール構成、設定内容が外部から分かり、攻撃者が既知の脆弱性を絞り込む材料になります。特にApacheの /server-info は、読み込んでいるモジュールと設定ディレクティブの一覧を表示するため、情報量が多くなります。
セキュリティAIチェッカーのこの項目は、代表的な4つのパスに限定してアクセスし、デフォルトコンテンツ特有の内容が返らないかを確認します。
代表的なデフォルトファイル
| パス | 由来 | 公開時に分かること |
|---|---|---|
/icons/ | Apache httpdの httpd-autoindex.conf にある Alias /icons/ と、その <Directory> の Options Indexes MultiViews | Apacheであること、アイコンディレクトリの一覧 |
/icons/README | 上記ディレクトリ内の説明ファイル(見出し「Public Domain Icons」) | Apache同梱物が残っていること |
/readme.html | WordPress本体に同梱(タイトル「WordPress › ReadMe」、「Semantic Personal Publishing Platform」) | WordPressであること、運用状況の推測材料 |
/server-info | Apacheの mod_info(SetHandler server-info、ページタイトル「Server Information」) | 読み込みモジュール、設定ディレクティブ、設定ファイルのパス |
Apache httpd同梱の httpd-info.conf は、/server-info と /server-status を Require host .example.com と Require ip 127 に制限した例を示しています。この制限を外したり、Require all granted にしたりすると、誰でも閲覧できる状態になります。
なぜデフォルトファイルを残してはいけないのか
OWASP WSTG-CONF-02は、アプリケーション基盤の設定確認として、既定・サンプル・既知ファイルの除去を求めています。OWASP ASVS 5.0.0も、内部向け文書や監視エンドポイントを意図せず公開しないこと(V13.4.5)、バックエンドの詳細なバージョン情報を公開しないこと(V13.4.6)、本番環境でデバッグ機能を無効化すること(V13.4.2)を求めています。
デフォルトファイルについてよくある誤解
- 「リンクしていないから見られない」:IPAの「安全なウェブサイトの作り方」2.1は、公開ディレクトリのファイルはリンクがなくても直接指定すれば閲覧できるとして、公開を想定しないファイルを置かないよう求めています。デフォルトパスは一般的な攻撃ツールや脆弱性スキャナーの辞書に含まれています。
- 「バージョンが書かれていないから無害」:ソフトウェアの種類が特定できるだけでも、攻撃対象の選別や、その製品に特化した攻撃(WordPressのプラグイン探索など)の起点になります。
- 「/icons/ はただの画像」:画像自体は無害ですが、ディレクトリ一覧が有効になっていることや、同梱物を整理していない運用状態を示します。
下層ディレクトリの一覧表示は「ディレクトリ一覧を公開していない」、CMSのインストーラーや管理入口は「CMSセットアップ/管理入口の露出」、Serverヘッダーのバージョンは「サーバーバージョンを露出していない」、下層ページやエラー応答のバージョン情報は「下層・エラー応答のバージョン/デバッグ情報」で確認します。このページは「同梱のデフォルトファイル」に絞って解説します。
Webサーバー/CMSのデフォルトファイルの診断基準(セキュリティAIチェッカー)
取得対象
外部診断強化モジュールが、診断対象の最終URLのオリジンに対して次の4パスへGETします。リダイレクトは追跡せず(followRedirects: false)、タイムアウトは1リクエストあたり5秒です。180KBを超える応答は先頭180KBだけを取得して判定します。
/icons/、/icons/README、/readme.html、/server-info
内容署名
応答がHTTP 200で、本文が次のいずれかの内容署名(大文字小文字を区別しない正規表現)に一致した場合を「デフォルトコンテンツ」と数えます。
| 署名 | 想定する対象 |
|---|---|
index of /icons | Apacheのアイコン一覧(ディレクトリ一覧) |
public domain icons | Apacheの /icons/README(.html版も同じ見出し) |
apache http server | Apacheの既定ページ・同梱文書 |
wordpress の後40字以内(タグをまたがない)に version または installation | WordPress同梱文書の旧形式 |
wordpress › readme(› 表記を含む)、semantic personal publishing platform | WordPressの readme.html |
server information | Apache mod_info のページ |
判定条件
| 判定 | 条件 | 得点への影響 |
|---|---|---|
| ○ 問題なし(pass) | 4パスのいずれも署名に一致しない(404、403、リダイレクト、通信失敗を含む) | 重み3を満点で加算 |
| △ 要確認(warn) | 使用しない | — |
| × 要改善(fail) | 1件以上が200かつ署名に一致 | 重み3に対して0点 |
| 対象外(na) | 使用しない | — |
ステータスだけでなく内容署名を必須にしているため、存在しないパスにもトップページを200で返す「soft-404」のサイトでも、返る本文に署名の語句(apache http server、server information など)が含まれない限り×にはなりません。リダイレクトを追跡しないので、ログイン画面やトップへの転送も○になります。根拠欄には「n/4件でデフォルトコンテンツの内容署名が一致」のように件数を表示します。
判定の範囲と限界
- 確認するのは代表的な4パスだけです。IISの
iisstart.htm、Tomcatのサンプル、phpinfo.php、/server-statusなどは本項目では確認しません(/server-statusや管理画面の一部は他の公開ファイル系項目で扱います)。 - 署名にない独自のデフォルトページは検出できません。
自治体サイトでの判定例
| 状況 | 判定 |
|---|---|
Apache上の公式サイトで /icons/ がアイコン一覧を返す | × |
WordPressで構築した観光サイトの /readme.html が残っている | × |
| 4パスとも404、またはCMSのエラーページ | ○ |
デフォルトファイルを公開しているとどんなリスクがあるか
- 攻撃対象の特定:ApacheやWordPressであることが確定すると、攻撃者はその製品の既知脆弱性やプラグインの探索に集中できます。
- 設定情報の露出:
/server-infoはモジュール一覧や設定ディレクティブを表示し、設定ファイルのパス、仮想ホスト構成、アクセス制御の内容が分かる場合があります。 - 運用水準の推測:デフォルトファイルが残っているサイトは、パッチ適用や不要機能の削除が徹底されていない可能性が高いと見なされ、標的として選ばれやすくなります。
単独では直接の侵入につながらないため重大度はmediumですが、他の脆弱性と組み合わさると被害を拡大させます。
デフォルトファイルの削除・拒否の設定方法(Apache・nginx・IIS・WordPress・Next.js)
Apache httpd
# httpd.conf:autoindexの読み込みをやめる(/icons/ のAliasを無効化)
#Include conf/extra/httpd-autoindex.conf
# mod_infoを使わないなら読み込まない
#LoadModule info_module modules/mod_info.so
# 使う場合は管理端末だけに限定
<Location /server-info>
SetHandler server-info
Require ip 192.0.2.10
</Location>
Debian/Ubuntu系では、/icons/ は alias モジュールの設定(alias.conf)で定義されています。このファイル内の Alias /icons/ 行と対応する <Directory> ブロックをコメントアウトします(a2dismod alias はほかの Alias・Redirect も止めるため避けます)。
共有レンタルサーバーで httpd.conf を編集できない場合、ドキュメントルートに実在する readme.html は .htaccess で拒否できます(<Files> は下層ディレクトリの同名ファイルにも適用されます)。
# .htaccess(ドキュメントルート)
<Files "readme.html">
Require all denied
</Files>
一方、/icons/ と /server-info は、サーバー設定の Alias や <Location> によってドキュメントルートの外で処理されるため、ドキュメントルートの .htaccess に書いた拒否設定やリダイレクトは適用されません。サーバー設定を変更できない場合は、ホスティング事業者に無効化を依頼してください。
nginx
location = /readme.html { return 404; }
location ^~ /icons/ { return 404; }
nginx自体は /server-info を持ちませんが、stub_status を公開している場合は allow/deny で管理端末に限定します。
IIS
既定の iisstart.htm と画像を削除し、<requestFiltering> の hiddenSegments や URL書き換えで不要パスを404にします。
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="readme.html" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
WordPress
readme.html、license.txt、wp-config-sample.phpはコアの更新で再配置されるため、更新後に削除するか、上記の.htaccessで恒久的に拒否します。wp-admin/install.phpは「CMSセットアップ/管理入口の露出」で別途確認します。
Next.js(Vercel)
フレームワーク自体はこれらのデフォルトファイルを公開しません。public/ ディレクトリにテンプレート由来の不要ファイル(next.svg、vercel.svg など)が残っていないかを確認します。
修正後の確認方法
for p in /icons/ /icons/README /readme.html /server-info; do
printf "%-16s " "$p"
curl -s -o /dev/null -w "%{http_code}\n" "https://www.example.lg.jp$p"
done
200が返った場合は、本文を確認してデフォルトコンテンツかどうかを判断します。修正後はセキュリティAIチェッカーで再診断し、この項目が○になることを確認します。
サイトを壊さないための注意点
/icons/を消すと、ディレクトリ一覧や一部の古いページがアイコン画像を参照している場合に画像が表示されなくなります。参照の有無をgrep -r "/icons/"で確認してください。.htaccessでRequireを使うにはAllowOverride AuthConfig(またはAll)が必要です。許可されていないと500エラーになるため、変更直後にトップページと主要ページの表示を確認します。httpd.confを変更した場合は、apachectl configtestで構文を確認してから再読み込みします。
よくある質問(FAQ)
Apacheの /icons/ を公開していると何が問題ですか?
画像自体は無害ですが、Apacheであることが分かり、ディレクトリ一覧が有効になっていることや同梱物を整理していない運用状態を示します。攻撃対象の選別に使われるため、Aliasを無効化します。
/server-info とは何ですか?
Apacheのmod_infoが提供するサーバー情報ページで、読み込んでいるモジュールや設定ディレクティブの一覧を表示します。設定ファイルのパスや仮想ホスト構成が分かる場合もあるため、使わないならモジュールを読み込まず、使うなら管理端末のIPに限定します。
WordPressの readme.html は削除してよいですか?
削除して問題ありませんが、readme.html・license.txt・wp-config-sample.php はコアの更新で再配置されます。更新後に削除するか、.htaccessの Files ディレクティブで恒久的に拒否します。
バージョンが書かれていなければ無害ではありませんか?
ソフトウェアの種類が特定できるだけでも、攻撃対象の選別や、その製品に特化した攻撃(WordPressのプラグイン探索など)の起点になります。
レンタルサーバーで httpd.conf を編集できない場合は?
ドキュメントルートに実在する readme.html は .htaccess で拒否できます。/icons/ と /server-info はサーバー設定のAliasやLocationで処理されるため .htaccess では止められず、ホスティング事業者に無効化を依頼します。
Webサーバー/CMSのデフォルトファイルは、セキュリティAIチェッカーでどう判定されますか?
/icons/、/icons/README、/readme.html、/server-info の4パスへリダイレクトを追跡せずにGETし、HTTP 200かつデフォルトコンテンツの内容署名に一致するものが1件でもあれば「× 要改善」、なければ「○ 問題なし」です。内容署名を必須にしているため、存在しないURLにトップページなどを200で返すsoft-404のサイトでも、その本文に署名の語句が含まれない限り×にはなりません。
この項目を含む127項目を、URLを入れるだけで無料診断します。