Website Vulnerabilities: How to Disable Directory Listing and Why It’s Crucial for Security
June 2, 2023
When directory listing is enabled, unintended files may become publicly accessible, increasing the risk of information leaks. In Nginx, directory listing is controlled by the autoindex
directive, which can sometimes be unintentionally enabled. This guide explains how to check if directory listing is enabled, why it’s a security risk, and how to disable it in Nginx. Protect your website with this essential security practice.
ディレクトリリスティングがオンになっているかどうかを確認する方法
自分のサイトでディレクトリリスティングがオンになっているかどうか確認する方法は主に3つあります。1つ目は、URLパターンでアクセスする方法、2つ目は、Curlコマンドを使う方法、3つ目は脆弱性スキャンツールを使う方法です。以下でそれぞれの方法を見ていきます。
まず、URLパターンでアクセスする方法を紹介します。
ウェブサイトでディレクトリリスティングが有効かどうかを確認するためには、以下の手順を参考にしてください。
- ブラウザでウェブサイトにアクセスします。
- アクセスしたウェブサイトのURLの末尾にスラッシュ(
/
)を追加します。例えば、**http://example.com/
**のようにします。 - ページが表示された場合、ディレクトリリスティングが有効になっています。ページにはディレクトリ内のファイルやフォルダの一覧が表示されるでしょう。
- ページが表示されない場合、ディレクトリリスティングが無効になっています。
次に、Curlコマンドで確認する方法を紹介します。
以下のコマンドを使用します。
curl -s -o /dev/null -I -w "%{http_code}" http://example.com/
上記のコマンドでは、**http://example.com/
**の部分を対象のウェブサイトのURLに置き換えて実行します。もしディレクトリリスティングが有効な場合、HTTPステータスコードとして「200」が表示されます。ディレクトリリスティングが無効な場合、HTTPステータスコードとして「403」(Forbidden)または「404」(Not Found)が表示されます。
これら以外の方法では、脆弱性スキャンツールを使えば、ディレクトリリスティングがオンになっているかが確認できます。
ディレクトリリスティングがオンになっていると、どんなリスクがあるか
ディレクトリリスティングがオンになっている場合、ウェブサイトのファイルやディレクトリの一覧がユーザーに公開されてしまいます。これにより、以下のような危険が発生する可能性があります。
- ディレクトリリスティングによって、本来非公開にすべきファイルがユーザーに公開されてしまうことがあります。これにより、機密性の高い情報やセンシティブなデータが外部に漏れる可能性があります。
- ディレクトリリスティングが有効な場合、攻撃者はウェブサイトの構造やファイルの配置を容易に把握することができます。これにより、攻撃者は特定のファイルやディレクトリにアクセスし、脆弱性を突いた攻撃を仕掛ける可能性があります。
- ディレクトリリスティングが有効な場合、攻撃者はファイルシステム上での移動を容易にすることができます。これにより、攻撃者はウェブサイトのルートディレクトリ外のファイルにアクセスし、機密情報や重要なファイルに侵入する可能性があります。
- ディレクトリリスティングを通じて、攻撃者はウェブサイトの内部構造やファイルの存在を把握することができます。これにより、攻撃者は標的とするウェブサイトに対してより効果的な攻撃戦略を練ることができます。
ディレクトリリスティングがオンになっている場合、これらの危険が発生する可能性が高まります。ウェブサイトのセキュリティを強化するためには、ディレクトリリスティングを無効化し、不要な情報の漏洩を防止することが重要です。
具体例
ディレクトリリスティングがオンになっている場合、以下のような形でサーバーのフォルダやファイルにアクセスできてしまいます。
画像の例ですと、本来公開する予定の無い、SecretフォルダなどもURLから誰でも閲覧できる状態になっています。
CMSを使用している場合、公開する予定の無いフォルダーやファイルも外部から閲覧可能な状態になってしまう可能性があります。管理画面内で機密性が高いファイルを扱っていた場合は、どこからでも閲覧可能になってしまいます。
このようにディレクトリリスティングがオンになっていると、情報漏洩の危険が増大します。
Nginxでディレクトリリスティングをオフにする方法
以降ではNginxでディレクトリリスティングをオフにする方法を紹介します。
/etc/nginx/nginx.confファイルの、serverディレクティブにあるlocation / 以降に、autoindex off;を追加することで、ディレクトリリスティングをオフにすることができます。すでに、autoindex on;が存在している場合は、これをautoindex off;に変更すればいいです。
変更前
server {
listen 80;
server_name domain.com www.domain.com;
location / {
autoindex on; # ここを変更
}
}
変更後
server {
listen 80;
server_name domain.com www.domain.com;
location / {
autoindex off; # 変更済み
}
}
これで外部からディレクトリを閲覧する事ができなくなります。
再度、ドメイン名/ の形でアクセスしてみて、ディレクトリが表示されなくなっていれば、ディレクトリリスティングがオフになり、外部から非公開情報を閲覧できなくなっていることが確認できます。