Mistake #83 : Exposed Stack Trace

裸のエラーメッセージ
「Stack Trace」

壁のクロスが剥がれて、電気配線がむき出しになっているホテル。
あなたならそんな部屋に泊まりたいですか?
エラー画面に表示された「英語の羅列」は、あなたのシステムの配線を全世界に公開しています。

⚡ むき出し配線診断
  • エラー画面に `NullPointerException` などの文字が表示される
  • 開発フレームワーク(Laravel/Rails等)のデバッグ画面が本番でも出る
  • エラー画面にSQL文がそのまま表示されている
  • 「何が起きたか」をユーザーに詳しく説明するのが親切だと思っている
⚠️ 警告:これは「脆弱性(Information Disclosure)」です。
攻撃者はそのエラー情報を使って、次の攻撃を組み立てます。

01. ハッカーへの招待状

Fatal error: Uncaught Error: Call to undefined function...
at /var/www/html/app/Controllers/UserController.php:42
Stack trace:
#0 /var/www/html/index.php(10): App\Controllers\UserController->show()
...

スタックトレースには「使用しているフレームワークのバージョン」「ファイルパス」「サーバーの内部構造」「実行したSQL」など、 ハッカーが喉から手が出るほど欲しい情報が詰まっています。
これを表示することは、家の玄関に「合鍵の隠し場所」と「金庫の暗証番号」を貼り出しているようなものです。
ユーザーにとって必要なのは「エラーが起きた」という事実と「どうすればいいか(待つか、問い合わせるか)」だけです。

エラーは見せるものではない。
記録する(ログ)ものだ。

02. カスタムエラーページの設置

Webサーバー(Nginx/Apache)やアプリケーションレベルで、必ずカスタムエラーページ(500.html, 404.html)を設定しましょう。
デザインされた静的なHTMLを表示し、裏側ではSentryやCloudWatch Logsに詳細なエラー内容を送信する。
これがプロフェッショナルの「おもてなし」であり、セキュリティ対策です。

03. 環境変数の管理

多くのフレームワークには `APP_DEBUG=true` や `DISPLAY_ERRORS=1` といった設定があります。
開発環境では便利ですが、本番環境でこれを `false` にし忘れる事件が後を絶ちません。
デプロイパイプラインの中で、環境変数が正しく設定されているか自動チェックする仕組みが必要です。

執筆:セキュリティエンジニア

脆弱性ハンター。
「エラー画面からサーバーのOSバージョンを特定する」などの攻撃手法を熟知し、防御策を講じる。