Pregunta

Estoy implementando un simple listado de directorio script en PHP.

Quiero para asegurarse de que el pasado camino es seguro antes de abrir directorio de asas y echoción de los resultados queramos o no.

$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;
        }
    }
}

Es esto suficiente para asegurarse un camino enviada por el usuario es seguro, o hay otras cosas que debo hacer para protegidos de los ataques?

¿Fue útil?

Solución

Puede ser que realpath() es útil para usted.

realpath() amplía todos los enlaces simbólicos y resuelve las referencias a '/./', '/../' y extra '/' los personajes en el ruta de entrada, y devuelve el canonizadas ruta de acceso absoluta.

Sin embargo, esta función supone que la ruta de acceso que se trata en realidad existe.No realizar la canonización de un no-existente de la ruta.En este caso se devuelve FALSE.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top