HTML-File-Formular, Java-Applet, Flash-Applikation. Welche Vor- und Nachteile, welche Sicherheitsrisiken gibt es?
Funktionell bedeutet der Upload von einem webbasierten Client zunächst einmal, dass der Anwender clientseitig im Browser die Möglichkeit erhält auszuwählen, welche Dateien er hochladen möchte, sowie den Upload-Prozess zu starten bzw. abzubrechen. Die wichtigsten Upload-Technologien, um Dateien von einem webbasierten Client mittels HTTP auf einen Webserver zu übertragen, werden daher hier vorgestellt: HTML-File-Formular, Java-Applet und Flash-Applikation.
HTML-Form-Upload
Um Dateien via HTTP zu übertragen stellt der HTML-Form-Upload die einfachste und auch heute gebräuchlichste der Upload-Möglichkeiten dar. Für den Datei-Upload muss clientseitig ein HTML-Formular mit einem Input-Element erzeugt werden. Damit kann der Anwender eine Datei von seinem lokalen Rechner zusammen mit dem Formular übertragen. Serverseitig muss dann ein Skript die ankommenden Formulardaten auf dem Server-Rechner verarbeiten. Die Übermittlung des Formulars muss beim Datei-Upload mit der Methode POST erfolgen. Außerdem müssen mit dem Attribut action das Ziel des HTTP-Requests und für die Übertragungsart das Attribut ENCTYPE, auf multipart/form-data gesetzt, angegeben werden (unten findet sich dazu ein Beispiel).
Notwendige Attribute des form-Tags beim Datei-Upload
Attribute des form-Tags beim Datei-Upload sind:
- method: method=“POST“ – Hierbei wird die Übertragungsart festgelegt. Für den Datei-Upload muss dies der Wert POST sein, der bestimmt, dass die zu übertragenden Daten im HTTP-Protokoll nicht im Request-Header, sondern im Body übertragen werden.
- action: action=“script.php“ – Legt das Ziel des Requests fest. Ziel ist ein serverseitiges Skript oder eine JavaScript-Abarbeitung.
- enctype: enctype=“multipart/form-data“ – Steht für die Art des Übertragungsformats vom Browser zum Server. Das Übertragungsformat „multipart/form-data“ erlaubt den Transfer ganzer Dateien, wobei unwesentlich ist, ob es sich dabei um Bilder, Texte oder andere Daten handelt. Fehlt dies, würde lediglich der Dateiname, nicht jedoch die Datei selbst übertragen werden.
Notwendige Attribute des input-Tags beim Datei-Upload
Attribute des input-Tags
- type: type=file – Zwingend notwendig, damit in das durch input erzeugte Eingabefeld der Name der hochzuladenden Datei eingegeben werden kann.
- name: name=“datei1″ – Der vergebene Name wird bei Verarbeitungsskripten benötigt, um auf die Daten des Eingabefeldes zugreifen zu können. Auch bei dem Formularfeldzugriff mit JavaScript ist der Name von Bedeutung.
Andere Attribute wie maxlength (maximal erlaubte Dateigröße) und accept (Angabe der erlaubten Dateitypen, empfohlen nach RFC 1867) können angegeben werden, sind jedoch nicht zwingend für den Datei-Upload notwendig. Da beide nur clientseitig wirken, können sie leicht umgangen werden. Üblich ist daher die serverseitige Überprüfung der hochgeladenen Dateien. Untenstehend findet sich ein Beispiel für einen Bild-Upload per HTML-Formular. Ausführliche Informationen zu HTM-Formularen finden sich bei Selfhtml.
Vor- und Nachteile des HTML-Form-Uploads
Der Vorteil des Uploads per HTML-Formular ist, dass dies in jedem Browser ohne weiteres (d.h. ohne zusätzliches Plugin) möglich ist. Hierdurch verringert sich auch der Programmieraufwand. Größter Nachteil des einfachen HTML-Form-Uploads ist die begrenzte Bedienerfreundlichkeit, denn pro File-Feld kann jeweils nur eine Datei ausgewählt werden. Es ist nicht möglich, ganze Verzeichnisse in einem Upload zu verarbeiten. Auch das Überwachen des Hochladevorgangs (z.B. Upload-Geschwindigkeit oder Rest-Upload-Zeit) ist clientseitig kaum realisierbar.
Upload über Java-Applet und Flash
Mittels Java-Applets und Flash lassen sich komplexe Websites mit Datenverarbeitung oder browser-basierte, interaktive Anwendungen ausführen. Damit können Programme in Webseiten ablaufen, die im Web-Browser arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten über die Leitung zum Server versenden zu müssen, was die Last vom Webserver auf den einzelnen Client abwälzt und Websites skalierbarer hinsichtlich der Nutzerzahl macht.
Java-Applets werden als Skriptsprache im Textformat direkt in den HTML-Code eingefügt oder in einer aus dem HTML-Code aufgerufenen Datei abgelegt und erweitern damit einzelne Webseiten um dynamische Elemente. Die mit der proprietären Entwicklungsumgebung Adobe Flash (kurz Flash, ehemals Macromedia Flash) erstellten Flash-Filme im SWF-Format (Shockwave Flash) werden mit Hilfe eines Plugins im Browser des Clients ausgeführt, z.B. mittels des proprietären Abspielprogramms Flash Player oder auch durch Ming als Open-Source-Plugin. Das Flash-Plugin erweitert somit den Funktionsumfang des Browsers. Es ist möglich, mehrere Dateien hochzuladen und sie auf verschiedene Ordner zu verteilen.
Der Upload mittels Java-Applet und Flash bietet dem Nutzer mehr Komfort als via einfachem HTML-Formular: Es können beliebig viele, auch verschlüsselte oder komprimierte Dateien hochgeladen und der Upload-Prozess kann überwacht werden (hinsichtlich Geschwindigkeit, Restzeit).
Nachteile von Flash und Java-Applets für den Dateiupload
Die Nachteile beider Technologien beim Upload-Einsatz im Internet überwiegen jedoch:
Einmal abgesehen davon, dass Java-Applets entweder die Java-Virtual-Machine des Browsers oder ein Java-Plugin benötigen, laufen sie aus Sicherheitsgründen in einer sogenannten Sandbox ab: Da Java-Applets wie ein herkömmliches lokales Programm auf dem Rechner des Anwenders ausgeführt werden, stellen sie ein Sicherheitsrisiko dar. Deswegen laufen sie in einer abgeschotteten Laufzeitumgebung (Sandbox), was wiederum den Zugriff auf das Dateisystem des Nutzers und damit auch einen Upload verhindert. Für den Datei-Upload sind Java-Applets nur nutzbar, wenn sie zertifiziert und damit außerhalb der Sandbox lauffähig sind. Bevor das Applet außerhalb der Sandbox funktionsfähig ist, muss der Benutzer dann das Zertifikat akzeptieren. Diese Zertifizierung ist nicht nur aufwendig und teuer, sondern bietet ebenfalls keine endgültige Sicherheit bezüglich der Vertrauenswürdigkeit des Applets. Ein weiteres Problem ist, dass Entwickler sich mittels Testzertifkaten selbst zertifizieren können, auch wenn dann ein entsprechender Warnhinweis beim Benutzer erscheint. Zum Prozess der Zertifizierung von Java-Applets sowie zu Sicherheitsrisiken informiert beispielsweise das BSI.
Achtung Sicherheitsrisiko!
Ähnliche Sicherheitsrisiken gelten für den Upload mit Flash: Der Flash Player verwendet grundsätzlich das Sandbox-Sicherheitsmodell für alle Anwendungen, Inhalte, Daten und URLs, um vertrauliche Daten zu schützen und ein sicheres Surfen für den Endanwender zu gewährleisten. So wird die abgeschottete Laufzeitumgebung (bei Adobe „remote sandbox“ genannt) verwendet, wenn das Programm mit Hilfe eines Browsers von einer Website aus gestartet wird. Ein Zugriff auf lokale Dateien und damit ein Datei-Upload sind nicht möglich. Auch hier wird versucht, den Sicherheitsrisiken durch eine Zertifizierung des Entwicklers des Flash-Plugins zu begegnen. Allerdings stellt die über den Zertifizierungsprozess gewonnene digitale Signatur nur die Authentizität des Anbieters fest. Sie sagt nichts über die tatsächliche Qualität des Plugins aus.