Java ist eine mächtige Sprache mit vielen Vorteilen:
Eine ausgereifte Virtuelle Maschine mit robuster Unterstützung von Nebenläufigkeit, die in der Geschwindigkeit ohne den Einsatz maschinenspezifischen Codes schwer zu schlagen ist, und deren Verbreitung auf unzähligen Systemen das einst gegebene Versprechen „Write once, run anywhere.“ so gut wie möglich einlöst. Dazu gibt es einen bunten Strauß an APIs für alle möglichen Einsatzgebiete.
Alles könnte so schön sein. Seit einiger Zeit aber hört man alle paar Wochen bis Monate (gefühlt ist es alle drei Tage) Meldungen über Sicherheitslücken und Exploits. Die Lücken befinden sich praktisch immer in der Absicherung des Browserplugins, der sogenannten Sandbox, dabei wird das Plugin gar nicht mehr gebraucht.
Vor 10 Jahren ergab es durchaus Sinn, Java-Applets in Webseiten zu integrieren: während JavaScript (nicht zu verwechseln, merke: „Java verhält sich zu JavaScript wie Wal zu Walnuss.“) noch in einem echten Interpreter ausgeführt wurde und entsprechend langsam war, hatte Java bereits einen JIT-Compiler. Auf der damaligen Hardware war das ein echter Vorteil, zumal die verlängerten Startzeiten im Vergleich zur Downloaddauer über die damaligen Internetverbindungen kaum ins Gewicht fielen. Heute wird auch JavaScript vor der Ausführung kompiliert, und so bleiben nur die Nachteile:
Das Sandboxkonzept ist bei der gegebenen Sprachmächtigkeit nicht in den Griff zu bekommen. Die JVM hat volle Unterstützung für Datei- und Netzwerkoperationen sowie Möglichkeiten zur dynamischen Erzeugung von Klassen, die diese Funktionen benutzen.
Die JavaScript-API in Browsern hat dagegen keinen schreibenden Zugriff auf das Dateisystem und kann im Netzwerk nur http-Verbindungen aufbauen. Nur mit einer Sprache, deren Laufzeitumgebung keine Konzepte der verbotenen Operationen hat, lässt sich eine halbwegs sichere Sandbox implementieren.
Das bedeutet nicht, dass es völlig unmöglich ist, auch aus der JavaScript-Sandbox auszubrechen, aber in Java muss der Angreifer nur die virtuelle Maschine austricksen, während er bei einer JavaScript-Lücke den systemspezifischen Maschinencode selbst einschleusen müsste. Während also JavaScript zum Ausbruch aus seinem Sandkasten ein Schäufelchen zur Verfügung hat, handelt es sich bei Java eher um einen Radlader. „Write once, run anywhere“ gilt bei Java eben auch für Exploitcode.
Die Konsequenz muss sein, Java komplett aus dem Browser zu entfernen — und das sage ich als Java-Entwickler. Beliebte und benötigte Java-Anwendungen wie Wordle oder ELSTER können genau so gut lokal als Programme installiert werden. Die JVM an sich ist nämlich nicht unsicherer oder sicherer als andere Laufzeitumgebungen, und es schmerzt, dass nach Jahren des „Java? Das ist doch viel zu langsam.“ sich jetzt „Java? Das ist doch viel zu unsicher.“ im allgemeinen Bewusstsein festsetzt.
Die Überlegungen gelten genau so übrigens auch für Flash.
6 Antworten auf „Entfernt endlich Java aus dem Browser!“
[…] Entfernt endlich Java aus dem Browser! Ich verstehe kaum, wieso, aber die Botschaft kommt trotzdem an. […]
[…] @karin1210 Achso. Für diesen Fall gilt sowieso dentaku.wazong.de/2013/05/04/e…m-browser/ # Microblog […]
[…] @paulinepauline Ceterum censeo dentaku.wazong.de/2013/05/04/e…m-browser/ # Microblog […]
[…] Da muss es doch was von GNU geben. Und tatsächlich: genau diese Aufgabe übernimmt GnuDIP. Das wird zwar seit mehr als 10 Jahren nicht mehr weiterentwickelt, funktioniert aber stabil (Ok, die Webseite sieht sehr altbacken aus und möchte gern ein Java-Applet zur Bestimmung der IP-Adresse verwenden — und was ich davon halte ist ja bekannt). […]
[…] @wuchale Genau! dentaku.wazong.de/2013/05/04/ent… # Microblog […]
[…] @Laird_Dave @faznet dentaku.wazong.de/2013/05/04/ent… # Microblog […]