O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

1898.4 Speicherung der hochgeladenen Dateien
Alle diese Felder können mit sinnvollen oder weniger sinnvollen Inhal-
ten belegt sein, ausgenommen der temporäre Name der Datei und das
Feld
error. Ersterer wird vom PHP-Interpreter vergeben, Letzteres
kann folgende Return-Codes beinhalten:
Mögliche Fehlercodes
beim Datei-Upload
UPLOAD_ERR_OK – Es hat alles geklappt, kein Fehler ist aufgetreten.
UPLOAD_ERR_INI_SIZE – Die Größe der Datei war größer als die
Angabe
upload_max_filesize in der php.ini-Konfigurationsdatei.
UPLOAD_ERR_FORM_SIZE – Die Datei war größer als die Angabe im
Formularfeld
MAX_FILE_SIZE.
UPLOAD_ERR_PARTIAL – Das Hochladen wurde vor Abschluss unter-
brochen.
UPLOAD_ERR_NOFILE – Es wurde keine Datei hochgeladen.
Nun wird die Datei in dem Ordner gespeichert, der in der
Konfigurationsdatei
php.ini angegeben wurde, und zwar unter dem
temporären Namen, der in $_
FILES['filename']['tmp_name'] gespei-
chert ist. Nach Beenden wird diese Datei wieder gelöscht. Das bedeu-
tet, die Datei muss vorher kopiert bzw. verschoben werden.
move_uploaded_file()
Dies erledigt die PHP-Funktion move_uploaded_file(). Diese Datei
kann auch mit anderen PHP-Funktionen kopiert werden, aber
move_
uploaded_file() hat den Vorteil, dass hier zusätzlich überprüft wird,
ob es sich um das hochgeladene File handelt. So ist ein Kopieren von
z.B.
/etc/passwd an einen über das Internet erreichbaren Ort nicht
möglich.
<?php
if(!isset($_FILES['filename']))
die "Fehler! Keine Angabe der Datei.";
if($_FILES['filename']['error'] != UPLOAD_ERR_OK)
die "Fehler! Probleme beim Hochladen.";
if(!move_uploaded_file($_FILES['filename']['tmp_name'],
"/Pfad/zur/Zieldatei"))
die "Fehler! Datei verschieben nicht möglich.";
?>
8.4 Speicherung der hochgeladenen Dateien
Beispiel für ein einfaches
Hochladen von Dateien
Diese hochgeladenen Dateien stellen natürlich ungeprüften und poten-
ziell gefährlichen Content dar. Diese Dateien sollten deshalb außerhalb
des Document Root, also des Hauptverzeichnisses des Webservers,
gespeichert werden. So kann verhindert werden, dass diese über den
Browser aufgerufen werden. Ein zusätzlicher Schutz besteht darin, der
oder den hochgeladenen Dateien zufallsgesteuerte Namen und die
erwartete Dateiendung zu geben:

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required