書籍からの情報を元に、プログラム実行系の引数にリクエストを混ぜて任意のコマンドを実行する攻撃のの対策方法(PHP)をメモ。
対策1、2、3を状況に応じて選択する
“;
system(”ls -al” , escapeshellarg(str_replace(’..’ , ” , ‘./’.@$_GET['dir'])));
[/PHP]
2、ホワイトリスト法
system関数または外部コマンドに渡しても良い引数のリストをあらかじめ作成しておき、そのリストにある文字列だけを通過させる。
典型例では、ディレクトリ名であることがわかっているので、配列を持たなくても以下のようなコードでも十分にホワイトリスト法として機能する。
[PHP]
dir = basename($_GET['dir']);
if(!is_dir($dir)) exit;
echo "“;
system(”ls -al” , $dir);
[/PHP]
3、safe_mode制限をかける
php.iniでsafe_mode制限をかける。
[CODE]
safe_mode = On
safe_mode_exec_dir = /usr/local/lib/php/safe_mode_bin
[/CODE]
その上で、
/usr/local/lib/php/safe_mode_bin
に実行許可する外部コマンドのシンボリックリンクまたは実体を用意する。
apacheのhttpd.confにて
毎に
[CODE]
php_admin_flag
[/CODE]
にて設定することも可能。
詳しいことはPHPサイバーテロの技法
に書かれてます。この本はすごくためになりました。著者の方に感謝!
その他14種類の脆弱性についてはこちらで一覧確認できます。
No related posts.
[...] 11 => 外部コマンド実行攻撃 , [...]
type:ピンバック [ ]