WordPress Tips | セキュリティ:ディレクトリインデックスの無効化

web Web
スポンサーリンク

ディレクトリインデックスってそもそも何?

まず「ディレクトリインデックス」という言葉を、イメージでつかみましょう。

ブラウザで、こんなURLを開いたとします。

https://example.com/wp-content/uploads

本来なら、ここには「index.php」や「index.html」などの“トップ用ファイル”が置かれていて、
それが表示されます。

ところが、サーバーの設定によっては、
そのフォルダの中身が一覧表示されてしまうことがあります。

2024/
2025/
banner.png
secret.pdf

みたいな感じで、「そのディレクトリにあるファイルやフォルダのリスト」が丸見えになる状態。
これが「ディレクトリインデックスが有効な状態」です。


なぜディレクトリインデックスが“セキュリティ的に危険”なのか

見せるつもりのないファイル構成が丸見えになる

ディレクトリインデックスが有効だと、
攻撃者はこんなことができてしまいます。

/wp-content/uploads/ を開いて、
中のフォルダやファイルを片っ端から眺める

/wp-content/plugins/プラグイン名/ を開いて、
どんなファイルがあるか確認する

これによって、

どんなプラグインを使っているか
どんなディレクトリ構成になっているか
バックアップファイルやテスト用ファイルが置きっぱなしになっていないか

といった情報が、“一覧で”見えてしまいます。

攻撃者にとっては、

「このサイトはこのプラグインのこのバージョンを使っているな」
「このフォルダに怪しいバックアップファイルがあるな」

といった“攻撃のヒント”が一気に手に入る状態です。

本来公開したくないファイルに気づかれやすくなる

例えば、うっかりこんなファイルを置いてしまったとします。

/wp-content/uploads/backup.sql
/wp-content/uploads/test.php

URL を知っていれば直接アクセスできますが、
ディレクトリインデックスが有効だと、

/wp-content/uploads/ を開くだけで
「あ、backup.sql あるじゃん」とバレる

という状態になります。

「URL を知っている人だけが見られる」ではなく、「フォルダを開いた人全員に見える」
ここが、ディレクトリインデックスの怖いところです。


具体的にどんな画面が「危ない状態」か

例:フォルダを開いたら“ファイル一覧ページ”になっている

ブラウザで、

https://example.com/wp-content/uploads/2025

のようなURLを開いたときに、
こんな画面が出てきたら要注意です。

「Index of /wp-content/uploads/2025」
その下に、ファイル名やフォルダ名がずらっと並んでいる

これは、まさにディレクトリインデックスが有効な状態です。

本来、WordPress サイトであれば、

404エラーになる
トップページにリダイレクトされる
真っ白(何も表示されない)

など、「中身の一覧は見せない」状態が望ましいです。


どうやって「ディレクトリインデックスを無効化」するのか(考え方)

Apache の場合(.htaccess で禁止するイメージ)

Apache を使っているサーバーでは、.htaccess でディレクトリインデックスを無効化できます。

イメージとしては、WordPress のルートにある .htaccess に、
次のような一行を追加します。

Options -Indexes
Apache

これにより、

そのディレクトリ以下で、
「インデックスファイルがないフォルダ」にアクセスされたとき、
ファイル一覧を表示せずに 403(Forbidden)などを返す

という挙動になります。

つまり、

/wp-content/uploads/2025/ にアクセスされても
「中身の一覧は絶対に見せない」というルールをサーバー側で強制する

ということです。

Nginx の場合のイメージ

Nginx でも、設定ファイルで

autoindex off;

のような設定を入れることで、
ディレクトリインデックスを無効化できます。

重要なのは、

アプリケーション(WordPress)の設定ではなく
Webサーバー(Apache / Nginx)のレベルで
「フォルダの中身一覧は見せない」と決める

という発想です。


「無効化すると何が起きるか」をイメージしてみる

Before:有効な状態

https://example.com/wp-content/uploads/2025

にアクセスすると、

Index of /wp-content/uploads/2025
image1.jpg
image2.png
backup.zip

のように、ファイル名がずらっと表示される。

攻撃者はここから、

どんなファイルがあるか
どんな名前で保存されているか
怪しいファイルが紛れていないか

を簡単に調べられます。

After:無効化した状態

同じURLにアクセスすると、

403 Forbidden(アクセス禁止)
あるいは
404 Not Found

などが返ってきて、
中身の一覧は一切見えない状態になります。

攻撃者からすると、

「このフォルダに何があるかは、URL をピンポイントで知らない限り分からない」

という状況になります。


プログラミングの感覚で捉える「ディレクトリインデックス無効化」

これは「ファイルシステムの中身をブラウザに晒さない」設定

アプリケーション開発の世界では、

サーバーのディレクトリ構造
内部ファイル名
バックアップファイル

などを、外部に見せるのはご法度です。

ディレクトリインデックスが有効というのは、

「このフォルダの中身、全部一覧で見せてあげます」

という状態なので、
ファイルシステムの構造をそのまま外に晒しているのと同じです。

無効化するのは、

「Webから見えるのは、あくまでアプリケーションが返すレスポンスだけ」
「ファイルシステムの中身は、直接は見せない」

という、健全な設計に戻す行為です。

「情報を与えすぎない」ことも立派なセキュリティ

セキュリティの基本のひとつに、

攻撃者に余計な情報を与えない

という考え方があります。

ディレクトリインデックスは、

どんなプラグインを使っているか
どんなファイルが置かれているか
どんな命名規則でファイルを保存しているか

といった情報を、“何も考えずに”攻撃者にプレゼントしてしまう機能です。

これをオフにするだけで、

攻撃者が「次の一手」を考えるための材料を減らせる
=攻撃の難易度を上げられる

という、地味だけど効く防御になります。


まとめ:ディレクトリインデックス無効化は「見せなくていいものを見せない」設定

「ディレクトリインデックスの無効化」というテーマの本質は、

フォルダの中身一覧をブラウザに見せない
=ファイル構成や余計なファイルの存在を悟らせない

という、とてもシンプルなセキュリティ強化です。

やるべきことのイメージはこうです。

自分のサイトで、/wp-content/uploads/ などを開いてみて、一覧が出るか確認する
もし一覧が出るなら、サーバーの設定(.htaccess や Nginx 設定)で Indexes / autoindex をオフにする

これだけで、

攻撃者に渡してしまう“余計な情報”を大きく減らせます。
セキュリティは「難しいことをする」だけではなく、
「見せなくていいものを見せない」という小さな工夫の積み重ねでもあります。
ディレクトリインデックス無効化は、その中でもかなりコスパの良い一手です。

Web
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました