Was mich aber noch interessieren würde, ist folgendes:
Welche allgemeinen "Gefahren" bestehen denn, wenn ich einem User einen File Upload ermögliche?
Ganz allgemein: Sofern du keine andere Beschränkung einrichtest, kann X ein File hochladen und Y kann es herunterladen, als Oktett Stream.
Dadurch ist dein Server ein offenes Filesharing System.
Da bist du auch kontrollpflichtig, soviel ich weiss. Wenn eine Bastelanleitung zum Bombenbau über deinen Server vertrieben wird, kann das in bestimmten Ländern unangenehme Folgen haben.
Er könnte eine PHP Datei, oder sonst irgendeine ausführbare Datei hochladen, die, wenn sie per HTTP erreichbar ist, dann ggf. "Schaden" anrichtet. Richtig?
Nur dann, wenn eine php Datei in diesem Directory geparst wird.
Ich bin mir nicht sicher inwiefern ForceType OctettStream dies generell verhindert.
Sonst noch irgendwelche potientielle Gefahrenquellen?
Was, wenn ich eine .htaccess Datei hochlade?
Wie kann man sich (am besten/ sichersten) vor diesen Gefahrenquellen schützen?
Indem du das Verhalten und die Einstellungen deines Servers kennen lernst.
- Datei in ein Verzeichnis außerhalb des doc root verschieben, bzw. in eines, welches nicht über HTTP erreichbar ist
Das hat zur Folge, dass du zum Zugriff auf diese Dateien dann einen spezielles (php) Skript gebrauchst, welches dann für jeden Filetyp den angemessenen Content-Type und das richtige Transfer-Encoding sendet.
- Verzeichnis zugangsschützen mittels .htaccess
Ein Zugangsschutz ist kein Missbrauchsschutz.
Aber du könntest alles sperren in einem Verzeichnis, ausser einem Script, dessen Aufgabe es ist, die Daten kontrolliert (wie im obigen Fall) auszugeben.
- Dateien im Verzeichnis nur zum Download ausliefern
mehr?
Wie gesagt. Du darfst nicht rigend eine Datei unter einem vorgegebenen Dateinamen einfach speichern, sonst lade ich dir eine .htirgendwas drauf.
Und wie sicher ist die Methode mit fgetss()? Laut Manual "Diese Funktion ist identisch mit der Funktion fgets(), außer dass fgetss() versucht, vorhandene HTML und PHP-Tags aus dem gelesenen Text zu entfernen." versucht die Funktion ja, evt. vorhandene Tags zu entfernen. Reicht das nicht aus?
Du kannst natürlich sagen: eine php Datei ohne php sensible tags sein ungefährlich. Aber ich bin mit bezüglich PHPs Lückenhaftigkeit schon beinahe sicher, dass man nicht darauf wetten sollte.
Was machst du damit wenn ein lua Dokument dummerweise etwas enthält, was wie php aussieht?
Ich "bearbeite" die hochgeladene Datei ja, indem ich mir nur die relevanten Teile heraussuche.
In dem Sinne brauchst du ja gar keinen Dateiupload, sondern ein Formular würde es ebenso tun.
Wenn ich der Autor eines Dokumenttypstandards wäre, würde ich mir ja so ein filtern zutrauen. Aber auf irgend welche Filetypen?
Wenn ich anschließend nur diese in dem File speichern würde, müsste das doch auch einen sicheren Schutz ergeben, oder?
Du kannst ja Dateien verzipppacken. Dann sind sie per se nur Downloadfiles. Aber damit ist dann auf dem Server eine direkte Verwendung ausgeschlossen.
mfg Beat