説明
errorhandler は、開発時に詳しいエラー応答を生成するミドルウェアです。開発環境に限定せず登録すると、例外メッセージ、スタックトレース、内部オブジェクトがクライアントへ渡る可能性があります。攻撃者が内部パス、フレームワークの動作、例外を起こす条件を調べる手掛かりになります。
想定される影響
- スタックトレース、内部ファイルパス、環境情報が外部ユーザーへ露出する可能性があります。
- 詳細なエラー情報を基に、後続の攻撃を調整されるおそれがあります。
- 開発用機能が本番環境に残り、セキュリティ方針やエラー処理の一貫性が損なわれる可能性があります。
対処方法
errorhandler()は開発環境だけで使い、本番環境やインターネットへ公開する環境では登録しないでください。- 必要な場合は、
process.env.NODE_ENV === "development"やapp.get("env") === "development"などの明示的な開発環境チェック内で有効にしてください。 - 本番環境では一般的な5xx応答を返し、詳細な例外はアクセスを制限したサーバーログだけに記録してください。秘密値は除去してください。
例
変更前
javascript
const express = require("express");
const errorhandler = require("errorhandler");
const app = express();
app.use(errorhandler());
変更後
javascript
const express = require("express");
const errorhandler = require("errorhandler");
const app = express();
if (process.env.NODE_ENV === "development") {
app.use(errorhandler());
}
解説:
- 変更前: すべての環境で開発用エラー応答が有効になり、内部情報が外部へ露出する可能性があります。
- 変更後: 開発環境でだけミドルウェアを登録します。本番用の一般的なエラーハンドラーは別途実装し、デプロイ環境の値も明示的に設定してください。