Prevención de LFI con la entrada del usuario

-1

Necesito un script para buscar registros que estén en archivos separados para cada usuario para poder obtener todos los datos del registro.

Ahora mismo tengo algo como esto:

public function getLog($name)
{
    if (is_file($this->getFull($name)) && $this->isValidFile($name))
    {
        // do stuff
    }
    // return false
}

public function getFull($name)
{
    return "/var/www/logs/" . $name . ".log";
}

public function isValidFile($accname)
{
    $allfiles = array_diff(scandir("/var/www/logs/" . $name . ".log"), array("..", "."));
    if (in_array($accname . ".log", $allfiles))
    {
        return true;
    }
    return false;
}

¿Eso es seguro?

    
pregunta Chris 18.08.2015 - 21:49
fuente

1 respuesta

2

A partir del código anterior, debe preocuparse más por recorrido de directorio que con LFI. Aunque es similar, un LFI permite la ejecución del código del archivo atravesado, mientras que el recorrido del directorio permite el acceso al archivo.

Para proteger, desinfecte "/var/www/logs/" . $name . ".log" con la función realpath y luego verifique que haya regresado la ruta comienza con /var/www/logs/ .

Esto restringirá la secuencia de comandos de modo que solo se pueda acceder a los archivos que terminan en .log en el directorio logs , o subdirectorio del mismo.

PHP 5.6.3 solucionó el último problema conocido con nulos que terminaban las rutas, por lo que no debería tener que preocuparse.

    
respondido por el SilverlightFox 18.08.2015 - 22:50
fuente

Lea otras preguntas en las etiquetas