CakePHPで作ったシステムを公開する時は、フレームワークが出力するデバッグ情報に気をつけましょう。
1. SQLログ
DEBUG定数の値を2以上に設定すると実行されたSQL文がログとして画面に表示されます。通常本稼働する際はDEBUGを0にしてこの出力は抑制するのですが、たまに本稼働でもSQL文がログが出力されているサイトがあります。
ちなみにSQLログに含まれるキーワードをGoogleで検索すると出力したままのサイトが見つかったりします。
“queries took” “Took (ms)” – Google 検索
対策
[app/config/core.php]にあるDEBUGを0にしておきます。公開サイトでSQL文を確認したい場合はCakePHP SQLをログに記録する方法などを使ってログファイルに出力するのが良いでしょう。
[app/config/core.php]
// define('DEBUG', 2); define('DEBUG', 0);
2. PageControllerへのルーティング
デフォルトのURLルーティングでは[/]と[/pages/*]なURLはPageControllerのdisplayアクションにルーティングされるようになっています。displayアクションでは[/pages/]以降で指定された値をビューテンプレートとして出力します。([/]は/pages/homeとして処理されます)
[/]なURLは大抵アクセスを想定しているのでルーティングを変更すると思うのですが、[/pages/*]なURLは変更を忘れがちです。そのままだと[/pages/home]なURLを指定すると、フレームワークに含まれるhome.thtmlが出力されてしまいます。
http://example.com/pages/home
対策
[app/config/routes.php]にあるPageControllerへのルーティングを削除します。
[app/config/routes.php]
// [/]のURLルーティングを変更 // $Route->connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); $Route->connect('/', array('controller' => 'top', 'action' => 'index')); (snip) // [/pages/*]のURLルーティングを変更 // $Route->connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
3. 存在しないコントローラ、アクション
これもDEBUG定数の値によって出力されます。DEBUGの値が1以上の場合、存在しないコントローラやアクションがURLで指定されるとエラーメッセージが表示されてしまいます。
例えばそこで[/a/a]のように存在しないであろうコントローラやアクションを指定すると「Missing Controller」や「Missing Method」が表示されます。
対策
1.と同様にDEBUGの値を0にします。
対策-さらに
フレームワークは[/foo(/bar)?]なURLであればコントローラとアクション(/barがなければ/indexが存在するとみなす)を探そうとします。ですのでリバースプロキシなどで外部からCakePHPシステムへアクセスされるURLを限定してしまうのもアリです。
こうしておけば予期せぬURLからのアクセスを防ぐことができるので、URLルーティングにおける想定外の動作を防ぐことができます。(この手法は結構好きなので良く使用します。;-))
便利機能には注意を
CakePHPに限らず各種フレームワークには開発に有用なデバッグ情報出力などの機能が用意されています。これらの情報は開発には役立ちますが、一般に公開すると攻撃者へヒントを与えることにもなりますし、何より見た目が宜しくありません。
特にURLルーティングに関しては今時のフレームワークでは実装されている機能だと思います。外部に公開するシステムでは、あらかじめ想定外のURLが指定された場合、どのような動作をするかを確認しておきましょう。
- Newer: PHPでメールの重要度を設定する
- Older: PostgreSQL VACUUM FULLせずに不要領域を削除する
トラックバック:0
- このエントリーのトラックバックURL
- /blog/2007/11/cakephp_not_print_debuglog.html/trackback
- Listed below are links to weblogs that reference
- CakePHP 公開する時はデバッグ情報を出さない from Shin x blog