5.2.6で修正されています。修正された、とは言え注意が必要です。PHPは古くからシェルコマンドとシェル引数をエスケープ処理する為に、escapeshellcmd関数とescapeshellarg関数を提供しています。この関数はマルチバイト文字にも対応しているのですが、ビルドや環境によっては対応できていないときがあります。escapeshellcmd/escapeshellarg関数ではC99で定義されてるmblen関数を利用しています。一般的なUNIX系システムではmblen関数は利用可能でると考えられるので、問題となる事は少ないと思いますが、PHPではphp_mblenマクロが以下のように定義されています。endif#endifescapeshellcmd/escapeshellargもphp_mblenを使用しています。mblenが利用できない場合、escapeshellcmd/escapeshellargマルチバイト文字のチェックが行われません。php_mblenの以下のように利用されているので、チェックされていないことは明白です。1;continue;}mblenが利用できるシステムでも、mblenやmbsinitの動作はロケールによって決まります。具体的にはLC_CTYPEの設定により変わります。コマンドがどのように実行されるかによって、エスケープ処理が無効となる場合があります。WebサーバがCロケールで動作していて、コマンドがSJISで動作している場合、ユーザ入力をコマンドに渡していると危険です。紹介エレクトロニック・サービス・イニシアチブのWebシステムのコンサルタントのブログです。PHPの開発、PHP4.x/5.xレガシーPHPセキュリティパッチサービスなどを行っています。ブログのサブタイトルを「書かない日記」としているのは、ブログを始めた時にあまり書かないつもりで始めたのでこのサブタイトルになっています。yohgaki@ohgaki.net私が記述したブログ中のコードは記載が無い場合はMITライセンスです。その他のコードは参考リンクなどのライセンス情報を参照ください。