[PHP-users 12047] Re: シェルコマンドは使わない方がいい?

php-users@php.gr.jp php-users@php.gr.jp
Thu, 05 Dec 2002 01:22:35 -0800


BACです。久しぶりに投稿します。

On Thu, 05 Dec 2002 16:58:42 +0900
みつき <mitsuki@zc5.so-net.ne.jp> wrote:

> 信頼性の高いシステム作りを目指したいのですが、
> PHPでできることはシェルコマンドを使わずに、PHPでやらないと問題があるのでしょ 
> うか?

 信頼性の高いシステムというのは、エラー処理やイレギュラーな状態に対する
対処がきちんとできているものになります。PHPの関数を使うことのメリットの
一つはエラーが拾えるということです。

 外部プログラムをそのまま叩いている部分をPHP関数に置き換えてもエラー処
理をしていなければ信頼性の高いシステムにはなりません。

 また、今回の例で見ると、

> $files = shell_exec("ls -cm (Path) ");
> exec("mkdir (Path)");
> exec("rm -fr (Path)");

 これらのコマンドが本当に意図したものを指しているか、作成者が把握できま
せん。パスはどうなっているか、それはPHPソース作成時から変更されることは
ないのか、など。一番目にカレントディレクトリにパスを通しているようなユー
ザに対して/tmpなどセキュリティの低いところにlsという名前のシェルスクリプ
トを用意して眠り爆弾のようにいつかそれが起動されるのを待つ、というタイプ
のトロイテクニックもあります。

 あと、言うまでもないですが、ユーザ側の操作によってシェルコマンドを発行
する場合の文字列に意図的な文字列を入れることができる場合は大きなセキュリ
ティホールとなります。`を利用して上記のトロイを作成することも場合によっ
ては可能です。

 外部プログラムを発行するとPHPの枠外の要素が多くなるので、作成者の意図
しない動作を回避するためにも、可能であればPHP関数で処理すべきでしょう。

------------------------------------------
bac@dev-nul.com