ひとことで言うと
Apacheなどの従来型Webサーバーでは`DirectoryIndex index.html`の設定がない場合、ディレクトリへのアクセスに対して配下のファイル一覧を返します。これがdirectory indexです。`http://example.com/assets/`にアクセスしたとき、`index.html`が存在しない場合に`style.css`や`logo.png`の一覧が見えてしまうのが典型的な事例です。
オブジェクトストレージ(S3・R2など)でHTMLを公開する場合はWebサーバーが存在しないため、directory indexの概念は直接当てはまりません。ただし類似のリスクとして「バケット内のオブジェクト一覧API」が存在します。S3のListObjectsAPIを使うとバケット内のすべてのオブジェクトキーを取得できてしまうため、バケットポリシーでListObjectsを明示的に禁止することが重要です。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
HTML共有で関係する場面
AIが生成したHTMLサイトをZIPでアップロードして展開するサービスでは、展開後のファイル群を特定ディレクトリに配置します。このディレクトリへの直接アクセスでファイル一覧が見えてしまうと、`secret-data.json`や`config.js`のようなアップロードしたつもりのないファイルまで公開されます。サービス側がdirectory indexを無効にしているか、またはアクセスルールで一覧表示を禁止しているかを確認してください。
静的サイトジェネレーター(Astro・Next.js静的出力など)を使って生成したHTMLをPagesやR2で配信する場合は、生成物に含まれるファイルすべてが公開対象になります。ビルドプロセスが`.env.example`や`README.md`を出力ディレクトリにコピーしていないか、デプロイ前に`dist/`ディレクトリの内容を確認する習慣を持ちましょう。
よくある誤解
「`index.html`が存在すればdirectory indexは表示されない」と思われがちですが、これはApacheなどのWebサーバー設定に依存します。`DirectoryIndex`に`index.html`が含まれていればその挙動になりますが、設定が異なれば`index.html`があってもdirectory indexが優先されることがあります。Nginxでは`autoindex on`が設定されている場合に一覧が表示されます。
「S3のバケットをパブリックにするとdirectory indexと同等になる」という誤解もあります。S3はデフォルトでオブジェクトキーの一覧表示は許可されず、個別のオブジェクトURLへのアクセスのみが可能です。ただしバケットポリシーでListObjectsを許可した場合はこの限りではありません。意図してListObjectsを許可しているかを定期的に確認してください。
安全に使うための注意点
自前でHTMLを公開するWebサーバーを運用する場合は、Apacheなら`Options -Indexes`、Nginxなら`autoindex off`を明示的に設定してください。これらはデフォルトで無効のサーバーも多いですが、設定ファイルに明示的に記載することで将来の設定変更でも安全性が維持されます。
HTML共有サービスを利用する側は、アップロードするZIPに公開不要なファイルが含まれていないかを事前に`unzip -l`で確認することが基本です。AIツールが生成したZIPに`debug.log`や`.DS_Store`が含まれるケースがあり、これらが公開されてもセキュリティ上の問題は小さいですが、ワークフロー情報や中間データが含まれないように注意してください。
よくある質問
Cloudflare PagesでHTMLをデプロイした場合、directory indexは表示されますか?
表示されません。Cloudflare Pagesは`index.html`が存在するパスへのアクセスはそのファイルを返し、存在しないパスは404を返します。ファイル一覧を返すdirectory indexの挙動はPagesには実装されていません。
バケット内のオブジェクト一覧を外部から見えないようにする設定は何ですか?
S3ではバケットポリシーの`s3:ListBucket`アクションを`Deny`にすることで一覧取得を禁止できます。R2では「パブリックアクセス」はオブジェクトURLへのGETのみ許可しており、一覧取得APIは認証なしでは利用できないため、初期設定のまま使えば問題ありません。
directory indexが有効なサーバーで特定ディレクトリだけ一覧を禁止できますか?
Apacheでは`.htaccess`に`Options -Indexes`を書くことでそのディレクトリ以下の一覧表示を禁止できます。Nginxは`.htaccess`に対応していないため、`location`ブロックごとに`autoindex off`を設定する必要があります。