[PHP-users 3868] Re: PHPのセキュリティモデルについて

まつなみ php-users@php.gr.jp
Mon, 26 Nov 2001 20:36:08 +0900


こんばんは坂本さん。まつなみです。

多くのことが書かれていて,全部理解しきれませんでした。すみません。

ringring> まず結構問題になる可能性のあるfopen関数による情報流出について

サンプルプログラム(1.php,2.php)のことですよね。
これって↓の脆弱性のことでしょうか?
http://www.owasp.org/projects/asac/owasp-iv-dt-1.shtml
(以下の記述はこの予想が合っていると仮定してます)

この手のミスでありがちなのは,
ringring> $fp = fopen($file, "r");
の部分で,$fileがブラウザからの入力データの場合,
$filepath = "/home/data/$file";
$fp = fopen($filepath, "r");

とやってしまうようなケースが多いようです。
そんで,攻撃パターンとしてはURLで?file=../../etc/passwdといった
クエリストリングを指定するものがありがちです。

対策としては,いろいろ方法はありますが,簡単なものとしては
(1)公開するデータファイルは必ず/home/data/以下に置くことにして,
(2)その上でファイル名の命名規則を/^[A-Za-z0-9.]+$/にマッチすると
決めてしまって,

if(preg_match(/^[A-Za-z0-9.]+$/, $file)) {
    $filepath = "/home/data/$file";
    $fp = fopen($filepath, "r");
    ...
}
else {
    エラー処理...
}

というのでセキュアになると思います。
要するに「入力値チェックをやりましょう!」ということです。
どうでしょう?

※勘違いや間違ってたら済みません。

-- 
まつなみ <mat@abelia.ocn.ne.jp>