2012-11-29 1 views
5
$num = $_GET['fileid'];      // get file id 

$realfile = "filename".$num.'.txt'; 

La mia domanda è che è ancora possibile azzerare questo? . '. txt' alla fine non scompare con l'iniezione di byte null secondo la mia sperimentazione. C'è un modo per null byte questo?php null byte injection?

+0

In Ext3/4 I personaggi di FS '\ 0' sono appena spogliati –

+0

Vorrei rimuovere tutti i dubbi e semplicemente convalidare l'input; usando una whitelist, usando un'espressione regolare, lanciare su int o su qualsiasi altra cosa si applica meglio. – jeroen

+0

% 00 --- http://ha.ckers.org/blog/20060914/php-vulnerable-to-null-byte-injection/ – user956584

risposta

4

credo che il codice potrebbe essere suscettibile ad attacchi di attraversamento delle directory - se qualcuno fornito "/../../foo" come fileid, allora il percorso sarà "filename/../../foo.txt", che potrebbe essere un bersaglio valido. Vedere: http://en.wikipedia.org/wiki/Directory_traversal

sto con @jeroen e @ shiplu.mokadd.im che suggerisce sanificazione tuo contributo - assumendo fileid è un numero, allora la funzione intval() ti farà bene:

$num = $_GET['fileid']; 
$num = intval($num); 
if($num == 0) { 
    echo "Invalid file ID: Not a number."; 
    exit; 
} else { 
    $fileName = 'filename' . $num . '.txt'; 
    if(!file_exists($fileName)) { 
     echo "Invalid file ID: Doesn't exist."; 
    } else { 
     // do something 
    } 
}