2016-06-26 9 views
1

Erstellung war ich PHP-Lösungen zu lesen und kam von Code über diese Zeilen, die mich verwirrt, und es wäre toll, wenn mir jemand die Bedeutung herauszufinden helfen könnte.einen Download-Link mit PHP

// define error page 
$error = 'http://localhost/phpsols/error.php'; 
// define the path to the download folder 
$filepath = 'C:/xampp/htdocs/phpsols/images/'; 

$getfile = NULL; 

// block any attempt to explore the filesystem 
if (isset($_GET['file']) && basename($_GET['file']) == $_GET['file']) { 
    $getfile = $_GET['file']; 
} else { 
    header("Location: $error"); 
    exit; 
} 

Auf der 7. Zeile von Codes, warum sollte basename($_GET['file']) nicht gleich $_GET['file']?

Antwort

3

Wenn jemand so etwas wie http://example.com/file.txt oder path/file.txt oder ../../../../etc/hosts zu $_GET['file'] weitergegeben dann wäre der Basisname nicht überein.

basename($file) == $file nur wahr sein, wenn ein Wert ohne Pfad (nur ein Dateiname) gegeben ist.

+0

Hallo zeichnete, danke für die Antwort! Nur noch eine weitere Frage: In der zweiten Zeile des Codes ist bereits angegeben, in welchen Ordner man schauen soll, wäre das nicht schon theoretisch sicher? Wenn ich 'download.php? File = .../index.php' ausprobiert habe, würde die Datei – Gnahzllib

+0

nicht anzeigen. Das' ..' könnte immer noch verwendet werden, um abwärts zu gehen, weil 'C:/xampp/htdocs/phpsols/images/'mit' $ _GET ['file'] = '../../../../ windows/system32/file' würde sich auf 'C: /' + auflösen, egal welcher Pfad nach den Punkten war. – drew010

+0

also '$ _GET ['file'] = '../../../../ windows/system32/file' wird' C:/windows/system32/file'? – Gnahzllib

0

In der 7. Zeile der Codes, warum würde Basisname ($ _ GET ['Datei']) nicht gleich $ _GET ['Datei']?

Da $_GET['file'] Pfadtrennzeichen enthalten.