Wierzę, że Twój kod może być podatny na ataki typu directory traversal - jeśli ktoś podał "/../../foo" jako fileid
, ścieżka byłaby "filename/../../foo.txt"
, która może być prawidłowym celem. Zobacz: http://en.wikipedia.org/wiki/Directory_traversal
jestem z @jeroen i @ shiplu.mokadd.im który sugeruje odkażania swój wkład - zakładając fileid
jest liczbą to funkcja intval()
zrobi ci dobrze:
$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
}
}
ext3/4 Znaki FS '\ 0' są po prostu usunięte –
Chciałbym usunąć wszystkie wątpliwości i po prostu sprawdzić poprawność danych wejściowych; używanie białej listy, używanie wyrażeń regularnych, odlewanie do int lub cokolwiek innego jest najlepsze. – jeroen
% 00 --- http://ha.ckers.org/blog/20060914/php-vulnerable-to-null-byte-injection/ – user956584