Dennis: Welche Datei-Endungen sind "kritisch"?

Beitrag lesen

Hi Ingo,

Das bedeutet, daß ich diese Zeichenketten aus dem Namen entfernen oder ersetzen muß, da die Uploads ja sonst nicht verfügbar sind.

Ich finde, dass du das Problem falsch angehst - ich würde das Grund her anders aufziehen und damit (wie ich zumindest denke) einige Probleme umgehen. Ich erklär einfach mal, wie ich das mal gemacht habe:

Zuerst werden die Dateien upgeloaded über ein Formular - in dem Dateinamen werden sämtliche nicht alpha-numerischen Zeichen durch einen Unterstrich ersetzt, aus "Fröhliche Ostern.doc" würde also "Fr_hliche_Ostern.doc" (natürlich ließe sich das auch so machen, dass Umlaute gesondert behandelt werden und zu ae, oe oder ue umgebastelt werden).
Dann wird die Datei in einem Verzeichnis außerhalb des Document Roots oder in einem Verzeichnis, welches mit Deny from All gegen einen Aufruf von außen geschützt ist. Der Dateiname setzt sich bei mir wie folgt zusammen: OriginalDateiName.endung+Zustand1+Besitzer. Zustand1 ist in meinem Fall 0 oder 1 und gibt an, ob die Datei gesperrt ist (gegen Download) oder nicht, es lassen sich natürlich noch weitere Zustände einbauen, das Plus-Zeichen trennt die "Felder". Besitzer ist der Username der Person (alternativ auch UserID), welche die Datei hochgeladen hat - also sozusagen der virtuelle Besitzer, wem die Datei im Filesystem des Servers gehört, hat damit gar nichts zu tun.

Der Download erfolgt dann über ein PHP Script, welches mit download.php?file=foobar.txt oder download.php/foobar.txt aufgerufen wird (wird kein mod_rewrite benötigt). Das Script sucht sich dann den vollständigen Dateinamen, nimmt diesen mit explode("+", $filename); auseinander, kann nach belieben Zustände prüfen und darauf reagieren - in meinem Fall würde der Download verweigert, wenn Zustand1 auf 1 gesetzt wäre und die Datei also gesperrt wäre.
Wenn aber alles ok ist und die Datei downgeloaded werden kann, wird sie einfach durchgeschleust.

Über die Information des Besitzers im Dateinamen kann man den Usern die Möglichkeit geben Ihre eigenen Dateien auch wieder zu löschen. Für dieses Beispiel braucht man keine MySQL Datenbank o.ä. - es werden einfach alle Informationen im Dateinamen gespeichert. Die Userverwaltung kannst du im Prinzip mit einem beliebigen Apache Auth-Modul laufen lassen.
Da die Dateien nicht übers Web aufgerufen werden können und ich beim Upload darauf achte, dass kein x-Bit für die Datei gesetzt wird, können die Dateien/Scripte/Programme nicht ausgeführt werden, das Download Script greift nur lesend auf die Dateien zu und schleust die Daten durch.

MfG, Dennis.