In this article
Java-Sicherheit erklärt
Sicherheit im Java-Ökosystem entdecken
Ein großer Teil der heutigen Anwendungen und Software basiert auf Java. Aufgrund seiner Beliebtheit betrifft die Sicherheit von Java-Anwendungen unzählige Nutzer und Entwicklungsteams. Die gute Nachricht: Das Java Developer Kit (JDK) verfügt über einige beeindruckend robuste Sicherheitsfunktionen – Sun Microsystems (heute Oracle) hat Java tatsächlich mit Blick auf Sicherheit entwickelt.
Die Sicherheit von Java-Webanwendungen hat jedoch nach wie vor ihre Grenzen. Unternehmen müssen wissen, welche Sicherheitsfunktionen in Java integriert sind und welche nicht. In diesem Artikel erfahren Sie daher, was zum Java-Sicherheitspaket gehört – und was nicht.
Die Grundlagen der Java-Sicherheit
Was ist Java-Sicherheit?
Java-Sicherheit umfasst drei Ebenen – Tools, APIs und Bibliotheken sowie die Sicherheit der Java-Sprache und -Laufzeitumgebung. Obwohl die Plattform standardmäßig ein hohes Maß an Sicherheit bietet, müssen Entwickler einige weitere Sicherheitsfunktionen kennen und aktivieren.
Ist Java standardmäßig sicher?
Das Java-Sicherheitspaket bietet Funktionen wie Kryptografie, Authentifizierung und Public-Key-Infrastruktur. Außerdem ist Java-Code aufgrund seiner starken Typisierung und weiterer integrierter Sicherheitsmaßnahmen von Natur aus sicherer als Code in manchen anderen Programmiersprachen. Auch die Verantwortlichen für das JDK veröffentlichen Sicherheitsupdates zuverlässig und zeitnah. So enthielten beispielsweise die neuen Funktionen in Java 17 Möglichkeiten, dem anhaltenden Problem der unsicheren Deserialisierung entgegenzuwirken.
Welche Sicherheitsfunktionen bietet Java?
Sowohl die Java-Sprache selbst als auch die zusätzlichen Funktionen des Java-Sicherheitspakets machen Java insgesamt zu einer sicheren Plattform.
Sicherheit der Java-Plattform
Die Java-Sprache selbst ist in vielerlei Hinsicht von Natur aus sicher. Zu ihren Funktionen gehören:
Automatische Speicherverwaltung – Die Speicherverwaltung durch Garbage Collection von Java gibt Objekte automatisch frei und sorgt dafür, dass der Code so sauber und robust wie möglich bleibt. Das trägt zur Sicherheit bei, denn sauberer Code erleichtert das Testen und verringert die Wahrscheinlichkeit von Schwachstellen.
Starke Typisierung – Als stark typisierte Sprache verlangt Java, dass Entwicklerinnen und Entwickler strenge Codevorgaben einhalten. Dadurch gibt es weniger Fehler und damit auch weniger potenzielle Sicherheitslücken.
Bytecode-Verifizierung – Beim Kompilieren wandelt Java den Code in plattformunabhängigen Bytecode um. Die integrierte Bytecode-Verifizierung prüft den Bytecode vor der Ausführung und verringert so das Risiko, dass schädlicher Bytecode eingeschleust wird.
Sicheres Laden von Klassen – Das dynamische Laden von Klassen ist eine wichtige Java-Funktion, da dadurch Softwarekomponenten zur Laufzeit installiert werden können. Dieser Mechanismus könnte Angreifern jedoch auch ermöglichen, Dateien direkt in Ihre laufende Anwendung zu laden. Zum Glück hat das JDK-Team diese Möglichkeit berücksichtigt. Sichere Class Loader ermöglichen es, jede Klassendatei von der Zugriffskontrolle der virtuellen Maschine prüfen zu lassen und anschließend Richtlinien anzuwenden, die zum jeweiligen Anforderungskontext passen. Zudem setzen sie Regeln für die Namensräume der Klassendateien durch. So wird verhindert, dass Angreifer Klassen fälschen und über Ihr System ausführen.
Diese Sicherheitsfunktionen sind jedoch nur dann hilfreich, wenn Teams die verwendete Java-Version aktuell halten. Veraltete Java-Versionen erhalten normalerweise keine Updates – auch keine Sicherheitskorrekturen –, es sei denn, Sie arbeiten mit einem externen Anbieter zusammen, dessen Support-Zeiträume länger sind. Teams können derzeit zwischen zwei verschiedenen Java-Versionen wählen. Entwicklerinnen und Entwickler können sich entweder für die neueste Java-Version ohne LTS entscheiden, die einem regelmäßigen Veröffentlichungsrhythmus folgt (alle sechs Monate), oder Java LTS mit längerem Support und längerer Update-Versorgung nutzen. Entscheidend ist, ein Modell zu wählen, das zum Team passt und es ermöglicht, die Version aktuell zu halten. Andernfalls bleiben die Sicherheitsfunktionen nicht auf dem neuesten Stand, was zu Schwachstellen führen kann.
Sicherheitsfunktionen von Java
Neben den integrierten Sicherheitsmaßnahmen der Java-Plattform gibt es einige weitere Sicherheitsfunktionen, die Entwicklerinnen und Entwickler beim Erstellen von Anwendungen ergänzen können. Sie sind alle im Java-Sicherheitspaket (package java.security) enthalten. Das Java-Sicherheitspaket stellt Klassen bereit für:
Kryptografie – Die Java Cryptography Architecture unterstützt verschiedene APIs für digitale Signaturen, Nachrichten-Digests, Chiffren, Message Authentication Codes und die Schlüsselgenerierung. Kryptografie verringert das Risiko, dass sensible Daten offengelegt werden.
Authentifizierung – Eine Sammlung von APIs namens Java Authentication and Authorization Service (JAAS) trägt dazu bei, dass Java-Code von vertrauenswürdigen Quellen ausgeführt wird. Damit lassen sich Sicherheitsfunktionen wie Single Sign-on (SSO), detaillierte Zugriffskontrollen für sensible Ressourcen und Verfahren zur Überprüfung der Nutzeridentität implementieren. Darüber hinaus bietet Java weitere austauschbare Login-Module für die Authentifizierung.
Autorisierung – JAAS prüft außerdem, ob Nutzer über die Zugriffsrechte verfügen, um eine bestimmte Aktion auszuführen.
Public-Key-Infrastruktur (PKI) – Java bietet Tools und APIs, die die Entwicklung und Bereitstellung von PKI-Anwendungen erleichtern. Ein PKI-Framework verwendet digitale Zertifikate, um die Kommunikation zwischen Server und Client abzusichern.
Sichere Kommunikation – Java bietet außerdem Funktionen, die Integrität und Vertraulichkeit der Datenübertragung zwischen Kommunikationspartnern in einem nicht vertrauenswürdigen Netzwerk schützen. Beispielsweise ermöglicht die JSSE-Standard-API sichere Sockets für TLS-/DTLS-Daten, SunJSSE stellt kryptografische Dienste bereit und Java Simple Authentication and Security Layer (SASL) definiert ein Authentifizierungsprotokoll und bietet eine zusätzliche Sicherheitsebene zwischen Client- und Serveranwendungen.
XML-Signaturen – Java unterstützt auch XML-Signaturen, die die Integrität von Daten überprüfen, indem sie einen Nachweis für die Gültigkeit eines Datensatzes liefern.
Die meisten dieser Funktionen konzentrieren sich entweder auf eine strenge Zugriffskontrolle – damit jede Entität nur auf Daten zugreift, für die sie berechtigt ist – oder auf eine sichere Datenübertragung. Eine stärkere Zugriffskontrolle und sichere Datenübertragung verbessern die allgemeine Sicherheitslage erheblich. Java macht es Entwicklerinnen und Entwicklern leicht, beides umzusetzen.
Verschaffen Sie sich mit unserem Code-Prüftool schnell einen Eindruck von der Sicherheit Ihres Java-Codes.
Sicherheit für Spring-basierte Anwendungen
Das Framework Spring Security bietet zusätzliche Sicherheitsfunktionen, mit denen Entwicklerinnen und Entwickler leichter sichere Spring-basierte Anwendungen erstellen können.
Spring Security umfasst Funktionen für Authentifizierung und Autorisierung, die sowohl in Servlet- als auch in WebFlux-Umgebungen unterstützt werden. Dazu gehören vor allem sichere Verfahren zur Speicherung von Passwörtern, die die Authentifizierung erleichtern.
Spring Security schützt außerdem vor gängigen Angriffen, darunter:
Schutz vor Cross-Site-Request-Forgery (CSRF) – Bei diesem Angriff fälscht ein Angreifer eine vertrauenswürdige Website, leitet Nutzer dorthin um und bringt sie dazu, persönliche Daten oder Geld preiszugeben. Spring verhindert dies mit zwei Mechanismen: dem Synchronizer-Token und der Vorgabe, das SameSite-Attribut für jedes Sitzungscookie festzulegen. Beide überprüfen die Identität einer Website, indem sie in Anfragen einen Vertrauensnachweis verlangen.
Sicherheits-Header für HTTP-Antworten – Spring Security unterstützt verschiedene HTTP-Antwort-Header. Diese Sicherheits-Header schützen Endnutzer vor einer Reihe von Angriffen, etwa Cross-Site-Scripting, Man-in-the-Middle-Angriffen und Clickjacking. Sicherheits-Header für HTTP-Antworten zählen zu den einfachsten und zugleich wirksamsten Möglichkeiten, verdächtige Aktivitäten zwischen Server und Webbrowser einzuschränken.
Weiterleitung zu HTTPS – Spring Security lässt sich so konfigurieren, dass eine Weiterleitung zu HTTPS erfolgt, sobald ein Client HTTP verwendet. Dadurch wird ebenfalls verhindert, dass verdächtige Aktivitäten die Kommunikation zwischen Server und Webbrowser beeinträchtigen.
Ihre Java-Anwendung mit Snyk absichern

Viele Java-Anwendungen basieren auf großen Frameworks wie Spring oder Quarkus. Diese bringen zahlreiche Abhängigkeiten mit, die unbedingt auf Schwachstellen geprüft werden sollten. Unser neuer Bericht zum Stand von Open Source zeigt, dass die durchschnittliche Zahl der Schwachstellen in den Abhängigkeiten einer Java-Anwendung recht hoch ist. Scans mit Snyk Open Source – auf Ihrem lokalen System, in Ihrer Pipeline und in Ihrem Repository – sind daher unerlässlich.
Java-Anwendungen mit Snyk abzusichern ist ganz einfach: Die Plattform lässt sich in wenigen Minuten installieren und konfigurieren. Snyk unterstützt Sie in jeder Phase des Softwareentwicklungslebenszyklus (SDLC) mit bewährten Sicherheitspraktiken für Java. So können Sie bessere und sicherere Java-Anwendungen für Ihre Nutzer entwickeln.
Auch bei der besten Programmiersprache können Fehler passieren. Mit Snyk Code finden Sie Sicherheitsprobleme in Ihrem eigenen Code ganz einfach. Sehen Sie sich diese Beispiele an, in denen Snyk Sicherheitsprobleme in Spring und IntelliJ IDEA behoben hat.
Sichern Sie Java-Code während der Entwicklung
Finden und beheben Sie Sicherheitsprobleme in Ihrem Anwendungscode in Echtzeit während der Entwicklung.