Asegúrese de que un usuario definido la ruta es segura en PHP
-
21-08-2019 - |
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 echo
ció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?
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.