Убедитесь, что пользовательский путь безопасен в PHP

StackOverflow https://stackoverflow.com/questions/847306

Вопрос

Я реализую простой скрипт перечисления каталогов на PHP.

Я хочу убедиться, что переданный путь безопасен, прежде чем открывать дескрипторы каталогов и 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;
        }
    }
}

Достаточно ли этого, чтобы убедиться, что путь, отправленный пользователем, безопасен, или есть другие вещи, которые я должен сделать для защиты от атаки?

Это было полезно?

Решение

Может быть , что realpath() это полезно для вас.

realpath() расширяет все символические ссылки и разрешает ссылки на '/./', '/../' и дополнительные '/' символы в пути ввода и возвращает канонизированное абсолютное имя пути.

Однако эта функция предполагает, что рассматриваемый путь действительно существует.Он не будет выполнять канонизацию для несуществующего пути.В этом случае возвращается значение FALSE.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top