Der Martin: HTTP Header fuer file download

Beitrag lesen

Hallo Fabian,

Der MIME-Type einer Datei kann doch sowieso nicht mit letzter Sicherheit festgestellt werden, oder?

nein, er wird normalerweise festgelegt, indem eine Seite sagt: So sei es.
Ein HTML-Dokument kann der Webserver auch mit dem MIME-Typ text/plain liefern; ein folgsamer Client sollte daraufhin den Quellcode auch als reinen Text anzeigen, auch "wenn er es besser weiß". Der IE neigt beispielsweise dazu, den MIME-Typ zu ignorieren, wenn er glaubt, das Dateiformat erkannt zu haben, und stellt auch als text/plain gelieferten Code als HTML dar, wenn er aussieht wie HTML.
Es gibt einige Fälle dieser Art, wo verschiedene Interpretationen einer Datei/Ressource möglich sind, daher kann man höchstens *einen* MIME-Typ bestimmen, der zu den Daten passen könnte - das muss aber nicht der Typ sein, den der Absender gemeint hat.

In deinem Fall kommt dazu, dass du ja *gar nicht willst*, dass die Daten vom Client überhaupt interpretiert werden. Er soll sie speichern und gut. Dafür ist der unspezifische MIME-Typ application/octet-stream genau richtig.

Du solltest nur noch sicherstellen, dass $file einen gültigen Dateinamen enthält; da du das Zielsystem und dessen Einschränkungen nicht kennst, beschränke dich am besten auf [0-9a-z].
Das wird natuerlich bereits beim upload der Datei ueberprueft! :-)

Ja, aber denke daran, dass das Internet heterogen ist. Während dein vermutlich Linux-basierter Webserver meint, ein Dateiname mit einem Doppelpunkt sei okay, wird ein Windows-Client damit Schwierigkeiten haben. Deshalb habe ich empfohlen, an dieser Stelle so restriktiv wie möglich zu prüfen.
Natürlich muss diese Überprüfung schon beim Upload stattfinden; wenn du sicher sein kannst, dass keine Dateien aus anderen Quellen dazukommen, kannst du beim Download eventuell drauf verzichten. Aber es tut ja nicht weh, den Namen sicherheitshalber nochmal zu checken; vielleicht hat in der Zwischenzeit jemand (du selbst?) per FTP eine Datei hochgeladen und so deine Prüfung umgangen.

So long,
 Martin

--
Die letzten Worte des Systemadministrators:
Nur gut, dass ich ein intaktes Backup habe.