GEEKy Script Writer [perl and more!]
You should permit the JavaScript!!
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
【対策も】PHPで記述された動的ページは、ハッカーのエサになりかねない。【あるよ】
PHP。
Pretty Hot soup Processorの略でもあるこの便利な言語であるが、思わぬ落とし穴が存在することもある。
エラーが生じたときに、デフォルトではエラー内容がそのままクライアント(ブラウザ)に出力されてしまうところだ。
詳細は追記にて。
PHPが従来のCGIと違う点は色々あるが、この「エラー内容を標準状態で出力してくれる(※1)」というところも大きく違うところだろう。
確かに、開発時に於いてこのエラー内容がHTTPクライアントからわかるというのは非常にありがたい機能である。
開発時にそれらのエラーは全て除去しているので別に問題ないのでは?と仰る方が居るかもしれない。

しかし、人間どこでミスをしているかわからない。
例えば、(初心者にとっては)入力値チェックが不十分なまま入力された値をファイル名などの一部として使ったり、空配列に対してforeachなどの処理を行うというのはなかなかエラー原因としては想定しづらいものである。
これらの想定しづらいエラーに遭遇したとき、PHPはクライアントにエラーを返す。
だがこのエラー内容には、PHPファイルへのフルパスが記述されている。fileなどの関数に関するエラーに至っては、そのファイル(大抵ログとかだろう)へのフルパスまで記述されているのだ。
これは非常にいただけない。

なぜなら、もしこのPHPプログラムが入力された値を使ってファイルへの読み書きを行うとすると、それらのファイルまでの位置がパスワードを盗んだりせずとも簡単に特定できてしまうためである。
そのPHPプログラム自体には穴がなくとも、他のPHPプログラムから簡単に場所を特定されてアクセスできてしまうかもしれない。
特に、一つのHDDで複数のドメインを運用しており、さらに管理するPHPプログラムが多岐にわたる場合などは、どのPHPプログラムに問題があるかなどが管理者側からは特定しづらく、穴のない本来そのファイルを操作しているPHPプログラムだけを確認し、原因が特定できぬままに終わってしまうかもしれない。

んじゃどないすんねん。
それは簡単な話で、一通りプログラムし終え、デバッグも終えたらエラーを出力しないようにすればよいのである。
error_reporting(0);

これをPHP開始直後にでも書いておけばよいだけである。
この関数の詳しい仕様については、PHP: error_reporting - Manualに詳しい。
また、このエラー出力抑制関数を使う場合は、事前に綿密なデバッグを行ってからにすること。


仰々しいタイトルには似つかわしくない小さなことを今更・・・と思われるかもしれないが、とあるサイトであまりにも多くのエラー出力が無視されていることに気付いたためこの記事を書いた。


補足:1
Perlでは、クライアントにエラー内容を出力してくれるモジュールがある。
use CGI::Carp qw/ fatalsToBrowser /;

これを#!/usr/local/bin/perlの下辺りにでも記述すればよい。


なお、PHPはPretty Hot soup Processorではないということをここに書いておく。
あれはジョークのつもりだ。マジにならないで欲しい。

テーマ:PHP - ジャンル:コンピュータ

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2005 GEEKy Script Writer [perl and more!] all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。