konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


[[セキュリティ指針]]

エラーメッセージの表示方法

説明

エラーメッセージの表示方法といっても大まかには2つある。正常なエラーメッセージと異常なエラーメッセージである。

正常なエラーメッセージ
メッセージユーザ入力の不足な項目を指摘するための、プログラマが意識したエラーメッセージ
異常なエラーメッセージ
PHPのFaitalエラーやnoticeなどのエラーで、本来ユーザに見えてはいけないものを示す。

被害例

  • 正常なエラーメッセージ
    パスワード入力画面で、ユーザ名が正しくパスワードが違った場合に、「パスワードが間違っています」と表示していたとする。しかしこれには重大な問題がある。なぜなら、攻撃者がユーザ名、パスワードを総当りで調べている場合にそのユーザ名が正しいということを露呈してしまうからだ。エラーメッセージは適切に、しかも、不要な情報を外部に漏らさないことが重要である。
  • 異常なエラーメッセージ
    たとえば、PHP上でDBがエラーを出して次の用なエラーメッセージがWeb上で表示されていたとする。
    Warnig SQL error:"SELCT * FROM hoge Where hoge=hogehoge"
    ここからたとえば、データベース名や、テーブルの名前等内部の情報が洩れてしまうことがある。また、PHPのこのようなエラーは、ユーザのHTML出力を無視して出力されるものなのでHTML体裁が崩れたり予測しない入力でセキュリティホールを誘発する可能性もある。

対策

正常なエラーメッセージ
はその語がユーザに必要な情報を与えていてなおかつ不要な情報を与えていないかを精査すること。
異常なメッセージ
set_error_handler関数を使用してハンドリングし自らエラー処理を実装するか、php.iniファイルのerror_logに出力するパスを指定することで対応が可能。 error_reporting (0);や、display_errorをoffにすることは問題発生時にエラーメッセージを参照できないため望ましくない。

最終更新のRSS