windows限定の話になってしまって恐縮なのだが。。。。
例えば以下のコードはDoS脆弱性を抱えている。
試しにfile=COM1とするとロックがかかった状態でプロセスが刺さってしまう。
(COMポートがないノートPC等では再現できない)
lock中にこの状態に陥るので全てのアクセスが凍る事になる。
希にファイル名=セッションIDにしてセッション文字列を[a-zA-Z0-9]+としてチェックをかけている実装をみかけるが、windows上でCGI/PHPを動かす事を考えると危険であると言える。
せめて^[a-zA-Z0-9]{32}$とかにしないとやられちゃうです。
$fp=fopen("lockfile","w");
if(flock($fp,LOCK_EX)){
print("lcokGet");
$file=$_GET["file"];
if(preg_match("[^a-zA-Z0-9]",$file)){
print("Attacked so Abort");exit();
}
$ffp=fopen("./data/".$file,"w+");
$contents = fread($ffp,10);
fwrite($ffp,"hoge");
fclose($ffp);
}
fclose($fp);
追記:pukiwikiは外部リクエストから作られるファイル名は[A-F0-9]+に拡張子を足した物にかぎってるみたいですね。これに引っかかる変態OSはたしかにまずなさそうだ。
0 件のコメント:
コメントを投稿