書籍からの情報を元に、Directory Traversal(ディレクトリ遡り攻撃)の対策方法(PHP)をメモ。
対策1、2、3、のいずれか(もしくは4)を選択して実施する。
[PHP]
if (!in_array($_GET['data_file'] , (許可ファイル名の配列)))exit;
readfile('/home/myhome/data/'.$_GET['data_file']);
[/PHP]
ファイル名に、basename()をかけてから渡す。
[PHP]
readfile('/home/myhome/data/'.basename($_GET['data_file']));
[/PHP]
ファイル指定に階層構造が必要なければ、リクエスト変数の受け取り時点(チェック前)にbasename()を使うことで、Directory Traversal攻撃への対策も同時に処理できる。
[PHP]
$data_file = basename($_GET['data_file']);
[/PHP]
ファイル名に’..’があった時点で処理を中断する。
[PHP]
if(strstr($_GET['data_file'] , '..'))exit;
readfile('/home/myhome/data/'.$_GET['data_file']);
[/PHP]
ファイル指定に階層構造が必要なければ、リクエスト変数の受け取り時点(チェック前)にbasename()を使うことで、Directory Traversal攻撃への対策も同時に処理できる。
[PHP]
$data_file = basename($_GET['data_file']);
[/PHP]
PHPスクリプトが開く可能性のあるディレクトリに、php.iniもしくはhttp.confでopen_basedir制限をかける。
php.ini例
[CODE]
open_basedir = /home/myhome/:/tmp/:/usr/local/lib/php/
[/CODE]
http.conf例
[CODE]
php_admin_value open_basedir /home/myhome/:/tmp/:/usr/local/lib/php/
[/CODE]
この場合、/home/myhome/内にあるPHPスクリプトのみが上記open_basedir制限を受ける。
詳しいことはPHPサイバーテロの技法に書かれてます。この本はすごくためになりました。著者の方に感謝。
その他14種類の脆弱性についてはこちらで一覧確認できます。
No related posts.
[...] 6 => Directory Traversal , [...]
type:ピンバック [ ]