BLOG ENTRY

外部コマンド実行攻撃の対策(PHP)

php

書籍からの情報を元に、プログラム実行系の引数にリクエストを混ぜて任意のコマンドを実行する攻撃のの対策方法(PHP)をメモ。







対策1、2、3を状況に応じて選択する



1、シェルエスケープ法



[PHP]
echo "
“;
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.

  • name:PHPで脆弱性の少ないセキュアなアプリを作るために実装時に意識すること | Web&MUSICブログ QUALL
  • date:2008/04/26
  • [...] 11 => 外部コマンド実行攻撃 , [...]

  • type:ピンバック [ ]

    WRITE COMMENT


    (required)


    (required)


    (required)

    MENU

    veltica creative of