ディレクトリトラバーサルとは文字列../やヌルバイトをクエリ文字に混ぜて想定していないファイルを開くディレクトリ遡り攻撃。
readfile($_DIR . $_GET['name'] . '.dat');
クエリとして?name=../somefile.txt%00を送信する。../により$_DIRで設定したファイルの1つ上の階層のディレクトリに遡られる。
そしてバイナリセーフでないreadfile関数
がヌルバイト%00を文字列の終端と判断する。よって$_DIRの1つ上の階層のsomefile.txtが読み込まれる。
if(!in_array($_GET['file'],$filelist){ exit; } else { readfile($_DIR . $_GET['file']); }
filelistは許可する文字列。
readfile($_DIR . basename($_GET['file']));
遡りのない不正ファイル指定には無効。
if(strstr($_GET['file'],'..')) { exit; } else { readfile($_DIR . $_GET['file']); }
遡りのない不正ファイル指定には無効。
open_basedir制限をつけることによりPHPがオープンできるファイルを特定のディレクトリツリーに制限する。
open_basedirはphp.iniに記述する方法とhtaccessに記述する方法がある。
詳しくはhttp://php.s3.to/man/features.safe-mode.html
を参照。
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。