ユーザー定義のパスを確認することはPHPで安全です
-
21-08-2019 - |
質問
私はPHPでスクリプトをリスト簡単なディレクトリを実装しています。
私は渡されたパスがディレクトリハンドルを開き、行き当たりばったりの結果をecho
ing前に、安全であることを確実にしたい。
$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;
}
}
}
ユーザーが送信パスが安全であることを確認するために、これは十分ですか、私は攻撃から保護するために行う必要がある他のものはありますか。
解決
これは realpath()
のはあなたに役に立つこともあります。
realpath()
は、すべてのシンボリックリンクを展開します そして'/./'
への参照を解決し、 中'/../'
と、余分な文字'/'
入力経路、およびリターン 絶対パス名を正規化します。
ただし、この機能は、問題のパスが実際に存在していることを前提としています。これは、存在しないパスの列聖を実行しません。この場合、FALSEが返されます。
所属していません StackOverflow