書籍からの情報を元に、関数eval()およびその応用関数に悪意あるリクエストを潜り込ませて任意のPHPコードを実行するeval攻撃の対策方法(PHP)をメモ。
対策1、2、3を並行して実施する。
[PHP]
if(!empty($_GET['high_light']) && strstr($text , $_GET['highlight'])) {
$text = substr(preg_replace('/ \>/.*\/esU’ , “str_replace(’”.$_GET['highlight'].”‘ , “.$_GET['highlight'].”‘ , ‘\\0′)” , “>$text<") , 1 , -1);
}
[/PHP]
preg_replace()の ‘ e ‘ 修飾子ではなく、preg_replace_callback()を使うように書き換える。
[PHP]
if(!empty($_GET['highlight'])) {
$text = substr(preg_replace_callback('/\>.*\$text<") , 1 , -1);
}
function make_highlight($matchs) {
return str_replace($_GET['highlight'] , '‘.$_GET['highlight'].’‘ , $matchs[0]);
}
[/PHP]
コールバック関数がリクエスト変数から決まる場合、あらかじめ用意した配列内に存在するものだけに限る。
[PHP]
if(!in_array($filter_func , array('make_highlight' , 'make_plaintext')))exit;
function = call_user_func($filter_func , $from , $to , $string);
[/PHP]
詳しいことはPHPサイバーテロの技法に書かれてます。この本はすごくためになりました。著者の方に感謝。
その他14種類の脆弱性についてはこちらで一覧確認できます。
No related posts.
[...] 10 => eval利用攻撃 , [...]
type:ピンバック [ ]