Prevenire LFI con l'input dell'utente

-1

Ho bisogno di uno script per cercare i registri che sono in file separati per ciascun utente in modo da poter ottenere tutti i dati del registro.

In questo momento ho qualcosa di simile a questo:

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

È sicuro?

    
posta Chris 18.08.2015 - 21:49
fonte

1 risposta

2

Partendo dal codice di cui sopra, devi essere più interessato a attraversamento di directory di quanto non faccia con LFI. Sebbene simile, un LFI consente l'esecuzione del codice del file attraversato mentre l'attraversamento della directory consente l'accesso ai file.

Per rendere sicuro, disinfettare "/var/www/logs/" . $name . ".log" con la funzione realpath quindi controllare che il reso il percorso inizia con /var/www/logs/ .

Questo limiterà lo script in modo che solo i file che terminano in .log nella directory logs , o nella loro sottodirectory, siano accessibili.

PHP 5.6.3 ha corretto l'ultimo problema noto con i percorsi di interruzione null, quindi non dovresti devi preoccuparti di questo.

    
risposta data 18.08.2015 - 22:50
fonte

Leggi altre domande sui tag