Upload von Dateien via PHP
Dateigrößen und Schreibrechte
- Sichere Uploads per PHP - Bildergalerie & Co.
- Fehlerbehandlung
- Datei-Handling
- Dateigrößen und Schreibrechte
Funktioniert nicht: MAX_FILE_SIZE
Auf zahlreichen Websites und auch im PHPManual wird kolportiert, dass man zu große Dateien schon vor dem Upload abweisen könne. Dazu müsse man dem Browser die maximale Dateigröße (im folgenden Beispiel 100 MByte) lediglich über MAX_FILE_SIZE per Web-Formular mitteilen:
<input type="hidden" name=
"MAX_FILE_SIZE" value="100000">
Tatsächlich gibt es keinen Browser, der diese Funktion unterstützt.
Der Parameter wird lediglich von PHP ausgewertet - also erst nach dem Upload. Nach dazu ließe sich dieser Parameter, wenn er denn eine Wirkung hätte, benutzerseitig leicht manipulieren.
In der Praxis hat er aus diesen Gründen keine Bedeutung.
Schreibrechte
Zugriffsberechtigungen auf Webservern werden regelmäßig viel zu großzügig vergeben, was Sicherheitsrisiken mit sich bringt. Deshalb zeigen wir Ihnen, wie Sie vorgehen sollten, um dem Webserver die notwendigen Schreibrechte für den uploads-Ordner einzuräumen.
Nachdem Sie den uploads-Ordner angelegt haben rufen Sie im FTP-Client dessen Eigenschaften auf, die beispielsweise so aussehen:
drwxr-xr-x 5 ftpuser ftpuser 4096
Apr 29 2009 uploads
Das d ganz links zeigt, dass es sich hier um ein Verzeichnis (directory) handelt. Die beiden ftpuser verraten, dass das Verzeichnis dem Benutzer ftpuser und der gleichnamigen Benutzergruppe gehört. Aus den auf das d folgenden Zeichen rwx geht hervor, dass der Benutzer ftpuser lesen darf, welche Dateien in dem Ordner stecken (r steht für read), dass er Dateien hineinschreiben (w für write) und in den Ordner wechseln (x) darf.
Das mittlere Dreierpäckchen (r-x) zeigt die Rechte der übrigen Nutzer aus der Gruppe ftpuser. Ihnen fehlt das Schreibrecht genauso wie der dritten Gruppe, den sonstigen am System angemeldeten Benutzern. Welche Benutzer es auf dem Server gibt und welchen Gruppen sie angehören, steht in der Serverkonfiguration (/etc/passwd und /etc/groups), die nur Betreibern eines Root-Servers zugänglich ist.
Wem ein SSH-Zugang zum Server fehlt, der tastet sich per FTP. Setzen Sie über den Eigenschaften-Dialog zusätzlich die Schreibrechte für die Gruppe des Eigentümers (rwxrwxr-x). Schlagen Uploads über das PHP-Skript danach noch fehl, so setzen Sie auch das Schreibrecht für die sonstigen Benutzer (rwxrwxrwx).
Ihr FTP-Client zeigt Benutzerrechte in Zahlenform an? Beachten Sie die Infos zur sogenannten Oktalnotation hier.
Wesentlich komfortabler ist da schon die Lösung per SSH.
Nach dem Login wechseln Sie in das Verzeichnis, das den Ordner uploads enthält. Mit ls-l | grep uploads bringen Sie dessen Eigenschaften auf den Monitor.ps aux | grep-i apache zeigt den Webserver-Prozess an:
www-data 8141 /usr/sbin/apache2
-k start
Der Webserver läuft demnach unter dem Benutzerkonto www-data. Mit chown www-datauploads macht man www-data zum Eigentümer von uploads, wie ls-l bestätigt:
drwxr-xr-x 5 www-data ftpuser 4096
Apr 29 2009 uploads
Der Webserver als neuer Eigentümer des Ordners darf jetzt hineinschreiben, der Benutzer ftpuser aber nicht mehr. Geben Sie einfach der Gruppe ftpuser mit chmod g+w Schreibrechte, um das zu korrigieren.