{{commentsTotalLength}}

Wie sicher ist Java?

Die Programmiersprache Java und ihre Probleme

Wenn über Java berichtet wird, dann oft im Zusammenhang mit Sicherheitslücken. Sollte man die Finger von der Software lassen? Was spricht für die Technologie? Ich gebe einen Lagebericht.

Java kann man durchaus als den Prügelknaben unter den Programmiersprachen ansehen. Die einen suchen händeringend Programmierer dafür, die anderen würden es am liebsten auf dem Scheiterhaufen sehen. Ich kam mit der Technologie schon im Studium in Berührung – vor Urzeiten also, als andere beim Wort Java noch an Urlaub oder Kaffee dachten. In diesem Blogpost gehe ich auf die aktuelle Situation ein.

Die Entwicklung eines Programms, das auf unterschiedlichen Geräte laufen soll, ist nicht erst mit iOS und Android ein Thema. Denn bereits vor über 20 Jahren wurde eine Lösung angestrebt, mit der sich Software auf verschiedenen Geräten und unterschiedlichen Betriebssystemen ausführen lässt – ohne, dass diese speziell angepasst werden muss. Möglich ist dies mit der objektorientierten Programmiersprache Java von Sun Microsystems, die 1995 auf den Markt kam. Später übernahm Oracle das Unternehmen hinter Java und entwickelt die Sprache weiter.

Mit Java entwickelte Programme werden nur einmal kompiliert und lassen sich danach auf verschiedenen Systemen mit Linux, Windows oder Mac OS X einsetzen. Damit dies funktioniert, werden sie nicht direkt von der Hardware des Computers ausgeführt, sondern von einer Virtuellen Maschine, die zum Beispiel in der Java Runtime Environment (JRE) enthalten ist.

Die Java Runtime Environment (JRE) ist bei Linux in der Regel vorinstalliert. Mit dem Befehl "dpkg --list *jre*" seht ihr, ob und welche Version vorhanden ist.

Virtuell ausgeführte Programme sind in der Regel nicht so effizient wie Programme, die zum Beispiel mit C oder C++ entwickelt wurden und auf der Hardware laufen. In den Anfangszeiten von Java war dies besonders zu spüren, zumal die Computer-Hardware im Vergleich zu heute deutlich langsamer arbeitete. Ein optimierter Code für die Virtuelle Maschine, der zudem einen Just-in-Time-Compiler erhält, sorgt inzwischen für Abhilfe. Denn der Just-in-Time-Compiler erzeugt bei der Programmausführung einen Maschinencode, den die Hardware direkt ausführen kann.

Java ist neben Desktop-Computern und Servern ebenso auf Mobilgeräten wie dem Java-Handy, PDA, TV oder der Set-Top-Box zu finden und gelangt durch das Internet-of-Things in weitere Geräte. Im Gegensatz zum Computer kommt hier ein Embedded Java zum Einsatz wie die Java Micro Edition (Java ME) von Oracle, für die es ein passendes Software Development Kit (SDK) für die Programmierung der Anwendungen gibt.

Das Versprechen, dass Java nicht nur plattformunabhängig sondern auch sicher sein soll, hat über die Jahre gelitten. Immer wieder gibt es Sicherheitslücken. Ein Blick in die National Vulnerability Database (NVD) zeigt 51 Einträge für 2016 in Bezug auf Oracle Java, wovon 13 als kritisch anzusehen sind. Im Vergleich dazu sieht es bei der der Programmiersprache C++ mit 6 Einträgen und davon 5 kritischen deutlich besser aus. Genauso bei .NET mit 11 Einträgen, die allesamt nicht kritisch sind. Geschlagen wird Java dafür in der Statistik von PHP: Die bei Web-Entwicklern beliebte Skriptsprache weist insgesamt 442 Einträgen in der NVD für 2016 auf, wovon 112 als kritisch eingestuft sind.

Die National Vulnerability Database (NVD) listet bekannte Sicherheitslücken.

Aber nicht nur Sicherheitslücken in der verwendeten Programmiersprache sind relevant. So steht C in der NVD zwar gut dar, aber dafür können in C programmierte Anwendungen etwa Pufferüberläufe verursachen und deswegen selbst ein Sicherheitsrisiko sein. Dies liegt daran, dass C hauptsächlich performant ausgerichtet ist und manche Aufgaben, die Java automatisch ausführt, nicht übernimmt. C fordert diesbezüglich mehr vom Entwickler. Und je nach Können, erzeugt dieser möglicherweise selbst Sicherheitslücken in seinen Anwendungen. Ob die dort entdeckt und behoben werden, hängt dann vom Entwickler ab.

Wie die NVD-Statistik zeigt, fallen Bugs bei Java auf und sind im Idealfall mit dem nächsten Update der Laufzeitumgebung behoben. Denn Java ist ein lebendes Projekt, wird gepflegt und weiterentwickelt.

Problematisch ist die Sicherheit bei Surfen zu bewerten, wenn ein Java-Plug-in für den Browser aktiv ist. Hier handelt es sich nicht um eine Sicherheitslücke im klassischen Sinn, die durch eine fehlerhafte Programmierung entsteht. Denn das Java-Plug-in soll schließlich ein Java-Applet im Browser ausführen, das auf einem Server liegt. Allerdings führt das Plug-in auch Java-Schadprogramme aus, wenn man auf eine entsprechend präparierte Webseite gerät. Zur Sicherheit sollte ihr also lieber das Java-Plug-in im Browser deaktivieren oder am besten gleich deinstallieren. Seit der Java-Version 9 sieht Oracle das Java-Plug-in übrigens ebenfalls als veraltete Technologie an und liefert es ab dieser Version nicht mehr mit der Entwicklungsumgebung Java SE und der Java Runtime Environment (JRE) aus.

Das Java-Plug-in für den Browser stellt ein Sicherheitsrisiko dar. Deswegen müsst ihr in den Einstellungen zur Sicherheit den Haken in der Checkbox vor "Java-Content im Browser aktivieren" entfernen. Die Einstellungen erhaltet ihr beim Aufruf des Java Control Panel, das mit dem Java Runtime Environment (JRE) installiert wird.

Wenn ihr selbst Software mit Java entwickeln wollt, benötigt ihr im Prinzip nur einen Text-Editor und das Java Development Kit (JDK), das Tools zum Kompilieren und Ausführen eurer Programme enthält. Das JDK bringt für die Kommandozeile den Kompiler javac mit, der aus dem Java-Quelltext der JAVA-Datei eine CLASS-Datei erzeugt. Letztere enthält den Bytecode von Java, der sich mit dem Kommando java in der Virtuellen Maschine ausführen lässt.

Eine Installation des JDK ist für Linux-Nutzer übrigens in der Regel nicht notwendig. Denn bei Linux-Distributionen wie Ubuntu oder Debian ist OpenJDK als Open Source Entwicklungsumgebung für Java vorinstalliert. Alternativ lässt sich bei Linux wie bei Mac OS X und Windows die Entwicklungsumgebung Java Standard Edition (Java SE) von Oracle installieren, die mittlerweile die Software JavaFx für multimediale Inhalte umfasst. Nach der Installation sind gegebenenfalls die Umgebungsvariablen JAVA_HOME, CLASSPATH und PATH so anzupassen, dass die selbst programmierten Java-Klassen sowie die Java-Tools vom System gefunden werden.

Zur Dokumentation der selbst erstellten Klassen bringt das JDK das Tool javadoc mit. Oracle verwendet es selbst für die Java-API-Dokumentation. Sie zeigt die Informationen als HTML-Text und umfasst alle vorhandenen Klassen, zu denen unter anderem jene für grafische Oberflächen, Netzwerk-Schnittstellen, Zertifikat-Verwaltung, Zeit und Verschlüsselung gehören.

Bei großen Projekten kann das Hantieren mit Editor und Kommandozeile anstrengend sein. Deswegen gibt es komfortablere Entwicklerwerkzeuge. Eines der bekanntesten ist Eclipse, darüber hinaus sind auch NetBeans IDE, Xcode, BlueJ und RapidClipse verbreitet. Für die Webentwicklung gibt es ergänzend das Google Web Toolkit (GWT), das Java-Code in JavaScript-Code übersetzt und einen XML-Parser mitbringt.

Entwicklungsumgebungen wie Eclipse helfen bei großen Java-Projekten.

Wer sich die Java Standard Edition (Java SE) von Oracle mit dem Java Development Kit (JDK) herunterlädt, erhält zudem kostenpflichtige Java-Funktionen auf den Rechner. Die Kosten fallen aber erst an, wenn Entwickler diese verwenden und entsprechende Lizenzgebühren an Oracle zu zahlen haben. Das betrifft auch den internen Einsatz in Unternehmen.

Oracle ist nicht der einzige Anbieter von Java-Tools. Unter Linux ist das Open Java Development Kit (OpenJDK) eine Alternative. Sein Code ist Open Source und frei von Funktionen, für die ihr Lizenzgebühren an Oracle zahlen müsstet. Darauf basierend gibt es von Azul Systems das kostenlose Zulu, für das sich Support hinzukaufen lässt. Ergänzend bieten IBM mit J9 und Red Hat mit IcedTea Entwicklungsumgebungen für Java an. Allerdings kann auch hier ein Blick in die Nutzungsbedingungen nie schaden.

Java gehört seit Jahrzehnten zur Softwarewelt und wird zum Beispiel von Minecraft sowie einigen LibreOffice-Funktionen verwendet. Unnötig und gefährlich ist es beim Surfen im Web, da über Java-Applets Schadsoftware ausgeführt werden kann, wenn man auf eine Webseite mit entsprechender Malware gelangt. Dies Gefahr umgeht ihr durch Deaktivieren oder Deinstallieren des Java-Plug-ins für den Browser. Mit HTML, JavaScript sowie CSS stehen heute ohnehin alternative Technologien zur Verfügung, sodass Entwickler kein Grund haben, Java-Applets einzusetzen. Hinzu kommt, dass gängige Browser wie Firefox, Microsoft Edge, Google Chrome und Opera HTML5 ohne Zusatztools verstehen und entsprechende Webseiten unkompliziert öffnen.

Davon abgesehen gibt es weder für Anwender noch für Entwickler handfeste Gründe, Java den Rücken zuzukehren. Die Programmiersprache bringt viele Funktionen mit, die bei der Entwicklung hilfreich sind. Und da die Anwendungsbereiche der Java-Technologie das Internet-of-Things und die Webentwicklung mit JavaScript umfassen, dürfte der Einsatz von Java je nach Projekt und Auftraggeber sogar vorgeschrieben sein.

Wer als Entwickler Bedenken wegen der Lizenzpolitik von Oracle hat, kann auf andere Java-Implementierungen wie dem Open Java Development Kit (OpenJDK), J9, IcedTea oder Zulu zurückgreifen.

Wie sind eure Erfahrungen mit Java? Teilt eure Eindrücke in den Kommentaren!

( )

Wie bewertest Du die Qualität des Beitrags?

Pflichtlektüre! ({{threeCount}})
Gut zu wissen ({{twoCount}})
Geht gar nicht! ({{oneCount}})
Vielen Dank für Deine Bewertung.
Deine Bewertung wurde gelöscht.

Kommentare

{{commentsTotalLength}} KommentarKommentare

Weitere Kommentare laden...

Das könnte dich auch interessieren