PHPで簡単なディレクトリリストスクリプトを実装しています。PHPでユーザ定義のパスが安全であることを確認する
ディレクトリハンドルを開く前に、渡されたパスが安全であることを確認し、結果をwilly-nillyでecho
したいとします。
$f = $_GET["f"];
if(! $f) {
$f = "/";
}
// make sure $f is safe
$farr = explode("/",$f);
$unsafe = false;
foreach($farr as $farre) {
// protect against directory traversal
if(strpos($farre,"..") != false) {
$unsafe = true;
break;
}
if(end($farr) != $farre) {
// make sure no dots are present (except after the last slash in the file path)
if(strpos($farre,".") != false) {
$unsafe = true;
break;
}
}
}
ユーザーが送信パスが安全であることを確認するために、この十分ですか、私は攻撃から保護するために行う必要があり、他のものがありますか?
foreach()内で変数を切り替える – Greg
:Oこれを選択していただきありがとうございます。 –