Domanda

Io sono l'attuazione di un semplice elenco di directory di script in PHP.

Voglio assicurare che il percorso passato è sicuro prima di aprire le maniglie di directory e echo ing i risultati, volenti o nolenti.

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

E 'questo abbastanza per assicurarsi un percorso inviato dall'utente è sicuro, o ci sono altre cose che dovrei fare per proteggere contro l'attacco?

È stato utile?

Soluzione

E 'possibile che realpath() è utile a voi.

  

'/./' si espande tutti i link simbolici   e risolve i riferimenti a '/../',   '/' e <=> caratteri extra nel   percorso di input e restituisce il   canonicalized percorso assoluto.

Tuttavia, questa funzione presuppone che il percorso in questione effettivamente esiste. Non eseguirà canonizzazione di un percorso non esistente. In questo caso viene restituito FALSE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top