Tom Meister: Sichere Uploads

Beitrag lesen

Hallo!

Geprüft wird der MIME-Typ.

Wie prüfst Du den?

Mit mime_content_type() und einer Tabelle der zulässigen Typen.

Zusätzlich ist das Uploadverzeichnis durch eine htaccess geschützt, die den Zugriff von überall verbietet.

Es ist außerdem noch wichtig, dass auch das Upload-Temp-Dir geschützt ist. Es sollte auf jeden Fall mit dem Sticky-Bit belegt sein und es sollten auch nur die Eigentümer Zugriff auf die Datei haben (gilt für Linux).

Sticky-Bit sagt mir jetzt nicht viel. Das Upload-Dir ist ja erst mal von PHP vorgegeben? Wo stelle ich das ein? In der php.ini? Und dann das Verzeichnis bearbeiten? Woher soll ein Angreifer wissen, wo das temp. Verzeichnis liegt?

Ich habe jetzt allen außer dem Eigentümer alle Rechte entzogen. Das Uploadverz. liegt noch unterhalb Document-Root. Zuvor wurden hochgeladene Dateien trotz Anhängen einer Endung (z. B. boese.php.meineEndung) ausgeführt, solange die htaccess deaktiviert war.

Nun konnte man trotzdem PHP-Skripts und schlimmer noch eine htaccess hochladen, weil text/plain erlaubt ist. Meine Lösung: An das Ende der hochgeladenen Datei wird eine weitere Dateiendung angehängt.

Du kannst auf einem eigenen Server das Verzeichnis in eine noexec-Partition legen
Du kannst für das Verzeichnis jedwede Ausführung / Übergabe der Dateien an Interpreter oder Shells unterbinden.

Wie?

Das Ablageverzeichnis für die Files sollte möglichst außerhalb der DocumentRoot liegen.

Reicht es wirklich nicht, wenn

a) eine eigene Endung angehängt wird
b) eine htaccess im Verzeichnis liegt
c) keine Lese- und Ausführrechte für alle außer dem Eigentümer (FTP) vorhanden sind? Eigentlich müsste doch b) langen, solange es einem Angreifer nicht gelingt, sie durch eine eigene zu ersetzen, oder?