開発用errorhandlerミドルウェアの有効化

開発用errorhandlerミドルウェアの有効化

説明

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());
}

解説:

  • 変更前: すべての環境で開発用エラー応答が有効になり、内部情報が外部へ露出する可能性があります。
  • 変更後: 開発環境でだけミドルウェアを登録します。本番用の一般的なエラーハンドラーは別途実装し、デプロイ環境の値も明示的に設定してください。

参考資料