heinetz: File Upload und Sicherheit

Beitrag lesen

Hallo Forum,

ich umreisse meine Aufgabe nochmal neu.

Es soll eine Web-Anwendung entstehen, mit der es möglich ist, mehrere PDF-Files hochzuladen. Neben den Files sollen Informationen, die der User in Formularfelder eingibt, übertragen werden. Die hochgeladenen Files sollen nach dem Upload auf einen entfernten Server übertragen und die Infos aus den Formularfeldern per Mail an admin versandt werden.

  • Es sollen nur PDFs hochgeladen werden.
  • Die PDFs dürfen eine best. Dateigrösse nicht übersteigen.
  • Auch für zusätzlich über Formularfelder eingegebenen Informationen müssen einem best. Format folgen.

Die Aufgabe im Frontend:

Das Frontend ist im Grunde nur eine HTML5-Seite mit einem Multipart-Form. Eine Validierung im Frontend wird mit jQuery bzw. Javascript umgesetzt. Das Formular wird per Ajax versandt.

Die Aufgabe im Backend:

Im Backend werden die übertragenen Daten als erstes nochmals mit PHP validiert. Ja nachdem, ob die Daten valide sind, wird entweder eine negative oder positive Rückmeldung als Response auf den Ajax-Request zurückgegeben und im Frontend ausgewertet. Sind die Daten valide werden sie ausserdem per FTP auf einen anderen Server übertragen und es wird eine Mail generiert. Sind sie es nicht verbleiben sie im upload_tmp_dir.

Lösung:

Das HTML5-Frontend soll mit Bootstrap umgesetzt werden. Für den Versand des Formulars per Ajax will ich das jQuery-Form-Plugin einsetzen und für die Validierung das jQuery-Plugin validate. Um die Daten im Backend zu validieren, orientiere ich mich an dem sehr ausführlichen Wiki-Artikel von @Jörg Reinholz.

Bei diesen Dingen bin ich mir unsicher:

  1. IE<10 Wenn ich das richtig verstanden habe, gibt es damit 2 Einschränkungen für meine Anwendung. Hit Hilfe der Javascript File Api kann ich auf die Dateien, die der User per Filebrowser auswählt (lesend) zugreifen. Bilder könnten angezeigt werden, bevor sie hochgeladen werden, was für mich unerheblich ist, denn es sollen ja PDFs hochgeladen werden. Aber die Dateigrösse kann der per Filebrowser ausgewählten Files kann man anzeigen. Das Feature wird es für den IE<10 nicht geben. Zum Anderen kann der IE<10 von Haus aus keine Ajax-Requests vom Typ multipart/form-data. Die Übertragung funktioniert aber auf Umwegen und darum kümmert sich das jQuery-Form-Plugin ;) Gibt's noch mehr, was ich beim IE beachten muss?

  2. Prozess-Balken Ein Feature, dass das jQuery-Form-Plugin bietet, ist ein Prozessbalken beim Upload (so_und_soviel_%_hochgeladen …). So einen Prozessbalken sieht man überall, wie ich ihn mit meinem jQuery-Form-Plugin erzeuge, ist schnell herausgefunden. Aber was dahinter steckt ist mir nicht ganz klar.

	var ajax = new XMLHttpRequest();
	ajax.upload.addEventListener("progress", function(event){
		console.log(event.loaded);
	}, false);
  • Das JS-Objekt XMLHttpRequest hat eine Eigenschaft upload.
  • Dieser wird ein Eventlistener "progress" hinzugefügt.
  • Der Event hat wiederum Eigenschaften wie bspw. loaded

Richtig? Das Ganze hat nichts mit PHP zu tun, wenn ich das richtig verstehe. Meine Frage zielt darauf ab:

In meinem Fall ist der "Prozess" ja nicht damit abgeschlossen, wenn die Files vollständig auf den Server geladen wurden. Was darauf folgt, ist zuerst die Validierung durch PHP und danach der Upload aus dem upload_tmp_dir auf einen FTP-Server. Von daher stellt sich die Frage, ob ich auch den Teil mit einem Prozessbalken darstellen kann.

Ist das denkbar?

gruss, heinetz