Tach!
$filename = htmlspecialchars($_GET['file']);
$filename = realpath($filename);
Das Dateisystem basiert nicht auf HTML, htmlspecialchars() hat da normalerweise nichts verloren. Dateinamen unterliegen anderen Beschränkungen. Nach dem realpath() fehlt eine Prüfung, ob der Dateiname mit dem Pfad-Teil anfängt, in dem die Dateien zu finden sind.
@readfile("$filename") [...]
Es werden teilweise recht große .zip Files (um 500 MB) durchgereicht. Ist das ok oder muss ich noch was beachten?
Mit readfile() ist das ok, das reicht die Datei stückweise durch, ohne großartig Speicher zu verwenden.
dedlfix.