第5章 暴露対策
デバッグオプション対策

デバッグオプション

ここに言うデバッグオプションとは、次のようなWebプログラムのURLがあるとき、

  http://(domain)/(path)/program?param=value

これに対して、例えば、debug=yes のようなパラメータを追加して次のようなURL

  http://(domain)/(path)/program?param=value&debug=yes

で呼び出すと、このプログラムが饒舌にHTMLページ上にデバッグ情報を出力しながら動作するようになる、というものである。

デバッグ情報を出力
図18:デバッグ情報を出力

このようなデバッグオプションは、プログラマのデバッグ作業をし易くするものである。
しかし、それと同時に攻撃者にも侵害の手がかりを与えてしまう。
攻撃者は、この1種類のみでなく、例えば、次のようなバリエーションを試すことによってデバッグオプションを活性化させようと試みる。

    debug=yes,   debug=1,   debug=true,   debug=on,
    dbg=yes,     dbg=1,     dbg=true,     dbg=on,
    test=yes,    test=1,    test=true,    test=on,
    verbose=yes, verbose=1, verbose=true, verbose=on,

(および、大文字を用いたこれらのバリエーション)

これら以外のものであったとしても、デバッグオプションのパラメータが、攻撃者に見つけられるおそれがある。

したがって、デバッグ情報をブラウザに向けて出力するのは避けた方がよい。

隠したデバッグオプションの活性化対策

隠したデバッグオプションの活性化対策として、はじめからHTMLページに情報を出力する形のデバッグ機能を設けないか、設けたとしても本番前に機能を無効にする。

すなわち、次のいずれかを行う。

  1. デバッグ出力はすべてサーバ内のログファイルに書き出すようにする
  2. 開発時はHTMLページ上へのデバッグ出力機能を持たせるが、プログラムが本番サーバに搭載される前にすべてソースコード上から削除する
  3. 開発時はHTML出力、本番運用時はログファイル出力となるようなデバッグ出力APIと、大本の切り替え機構を設ける

加えて、これらの対策が確実に行われていることを確認する運用を行う。

  1. 本番サイトにWebプログラムを設置する前にソースコードを検査し、デバッグオプションあるいはHTML上にデバッグ出力する設定が残存していれば、それを削除・修正しないかぎり当該プログラムの本番サイト上への設置を許さない。

また、この検査のタイミングで、次のことも行うとよい。

  1. HTMLコメントに不用意な情報が書かれていないか検査する