説明
Expressの本番用ルートに serve-index を登録すると、リクエストしたユーザーがディレクトリのファイル一覧を閲覧できます。静的配信のルートにバックアップ、設定、ログ、ソースマップなどが残っていると、内部構造や機密ファイル名が露出するおそれがあります。
想定される影響
- 内部のディレクトリ構造やファイル名の露出
- バックアップ、ログ、設定ファイルの発見やダウンロードが容易になること
- 公開されたファイル名やバージョンを使った攻撃の下調べ
対処方法
- 本番環境では
serve-indexを登録しないでください。 - 公開専用の静的ディレクトリだけを
express.staticで配信してください。 - 必要なファイルは、明示的なルートやインデックスファイルで公開してください。
- デプロイする成果物から、バックアップ、ログ、設定、ソースマップを除外してください。
例
変更前
javascript
const express = require('express');
const serveIndex = require('serve-index');
const app = express();
app.use('/files', serveIndex('public/files'));
変更後
javascript
const express = require('express');
const app = express();
app.use('/assets', express.static('public'));
app.get('/files', (req, res) => res.status(403).end());
説明:
- 変更前:
serve-indexを登録することで、リクエストしたユーザーがファイル一覧を閲覧できます。 - 変更後: 本番のアプリケーションには
serve-indexを登録していません。