|
Beiträge: 6 Registriert: Apr 2004
| 16.06.2010, 13:10
hey Ho,
folgendes Problem:
Ich bin gerade dran einen Dateiupload zu realisieren. Dazu hab ich ein normales HTML Formular erzeugt mit einem InputFeld Typ FILE.
Das Hochladen funktioniert auch, jetzt bin ich aber dabei die Datei auf dateityp hin zu untersuchen, da nur jpgs und flvs erlaubt sind. Die mach ich mit Hilfe des MimeTyp.
$_FILES['thefile']['type'] liefert mir demnach bei einem FLV "video/x-flv"
Also mach ich einfach ne if Abfrage ob der Mimetyp der hochgeladenen Datei entweder "video/x-flv" oder "image/jpeg". Also Skript auf den Server geladen und ausprobiert. Funkt bei mir unter Win7 mit den browsern Firefox, Chrome und IE
Beim Kolleg unter Win Vista funktionierts nicht. Meine Fehlersuche hat bereits ergeben dass bei ihm folgende Ausgabe für $_FILES['thefile']['type'] erscheint: "application/octet-stream"
Also scheints irgendwie am Betriebssystem zu liegen, den $_FILES['thefile']['type'] gibt den mimetyp aus, den der User liefert.
Wie löse ich das Problem? :D |
|
|
Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 16.06.2010, 14:08
Der Mime-Type kommt vom Browser (und der benutzt je nachdem die Information vom System).
Ob die Angabe tatsächlich stimmt weisst du dadurch als kein bisschen.
Eine andere Möglichkeit wäre z.B. Fileinfo oder einfach die Dateiendung zu überprüfen. |
|
|
Beiträge: 172 Wohnort: Wiesbaden Registriert: May 2009
| 16.06.2010, 14:51
@jomac
ich stimme dir zu mit Fileinfo, aber "...einfach die Dateiendung überprüfen..." ist der schlimmsten Fehler, den du machen kannst! Da könnte man sich gleich die Prüfung sparen!
PS: Bau noch eine Größenbeschränkung pro File ein, sonst ist der Webspace extrem schnell voll.
ODER überprüfe das Verzeichnis per Cronjob.Actionscript...O.o?.... Ist das ein neues Gewürz, was stinkt?!
API für C++ & Java |
|
|
Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 16.06.2010, 15:00
Was ist daran ein Fehler?
Dass alles was vom Client kommt nicht in Ordnung sein kann sollte jedem klar sein.
Die Prüfung des Mime-Types bringt da wie gesagt rein nichts. Selbst wenn die nicht selbst mit der Dateiendung gemacht wird, es ist sehr einfach schädlichen Code an ein gültiges Bild z.B. in JPG Format anzuhängen.
Die Prüfung könnte man sich für die, die wissen wie man es umgeht eh sparen, aber normalerweise geht es bei der Prüfung nur um eine Zuordnung.
Was man danach mit dem File macht kann dann ein Fehler sein, aber nicht ob man die Dateiendung oder den Mime-Type mit Fileinfo prüft. |
|
|
Beiträge: 6 Registriert: Apr 2004
Themenautor/in
| 16.06.2010, 15:13
$typ = mime_content_type('php.gif');
Würds damit gehn, wenn ich für php.gif die hochgeladene Datei nehme?
Den Mimetyp kann ich ja erst bestimmen, wenn die datei hochgeladen ist. Kann ich eine Dateiüberprüfung vor dem upload nur mit javascript realisieren oder? Und dann nochmal auf dem Server mit php. |
|
|
Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 16.06.2010, 15:39
Es sollte damit funktionieren, wenn die extension installiert ist.
Nach der offiziellen Doku solltest du mime_content_type nicht mehr verwendunden und dafür finfo mit FILEINFO_MIME benutzen. |
|
|
Beiträge: 172 Wohnort: Wiesbaden Registriert: May 2009
| 16.06.2010, 17:28
@jomac
kompromiss:
80% aller User/"Hacker" kann man mit 20% der Arbeit(Fehlermeldung beim Upload) vertreiben. Die restlichen 20% bekommt man gar nicht oder man muss mindestens 80% an Arbeit investieren.Actionscript...O.o?.... Ist das ein neues Gewürz, was stinkt?!
API für C++ & Java |
|
|
Beiträge: 579 Wohnort: Halle Registriert: Apr 2005
| 16.06.2010, 23:23
Hallo zusammen,
ich hab mal vor einer ganzen Weile eine Art kleines Tutorial zum Dateiupload geschrieben. Wenns der Gemeinde hilft, kann es unter http://bittenbyrat.de/daten/dateiupload/dateiupload_mit_php5.pdf (PDF/ca. 340 kB) heruntergeladen werden.
Patrick_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0' |
|
|
Beiträge: 6 Registriert: Apr 2004
Themenautor/in
| 17.06.2010, 10:02
Cool Danke. Anschaulich erläutert.
Aber das Problem mit dem MimeTyp würd auch bei deiner programmierung zu einem Fehler führen. Es muss doch eine Lösung dafür geben. |
|
|
Beiträge: 89 Wohnort: CH Registriert: Jun 2010
| 17.06.2010, 12:23
Ich weiss nicht inwiefern du dich dem bewusst bist, aber sehr viele Dateiformate haben ein paar Merkmale, aber hängen sonst beinahe nur von der Dateiendung ab, ausserdem wäre es seeeehr sehr auwändig eine Datei auf all diese möglichen Merkmale hin zu testen.
Die Lösung von oben hast du ja, aber wenn du wirklich die Dateien auf ihre genaue Struktur prüfen willst schau dir den Standard der Dateien an. Fileinfo macht das bereits zu einem Teil, unter dem Link in der Doku findest du genügend Beispiele, aber selbst dann ist es wie gesagt ziemlich einfach etwas zusätzliches anzufügen.
In seinem Beispiel testet er auch einfach die Dateiendung und das sollte in den meisten Fällen vollkommen genügen, denn normalerweise ist nur eine Zuordnung verlangt (bzw. Verbot/Erlaubnis).
Wenn das nicht genügt, dann solltest die Datei auslesen und nach dem Standard wieder aufbauen. In vielen Datei-Formaten könntest du dadurch "schädlichen" angehängten Code oder von was auch immer du Angst hast entfernen. |
|