Sicherheit von Java-Anwendungen: Top-10-Schwachstellen und wie man sie vermeidet

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum die Sicherheit von Java-Anwendungen keine Option, sondern eine Notwendigkeit ist

Java bleibt eine der beliebtesten Sprachen für die Entwicklung von Unternehmens- und Webanwendungen. Diese Popularität zieht jedoch auch erhöhte Aufmerksamkeit von Angreifern auf sich. Laut OWASP (Open Web Application Security Project) führen Schwachstellen im Code jährlich zu Datenlecks und finanziellen Verlusten in Milliardenhöhe. In diesem Artikel analysieren wir die Top-10-Schwachstellen von Java-Anwendungen, zeigen reale Codebeispiele und geben konkrete Schutzempfehlungen. Das Material ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich, die sicheren Code schreiben möchten.



1. Injection: SQL, LDAP und Command Injection

Injection bleibt der König der Schwachstellen. Der häufigste Fall ist die SQL-Injection, bei der Benutzereingaben direkt in eine SQL-Abfrage konkateniert werden.

Beispiel für anfälligen Code

String query = "SELECT * FROM users WHERE username = '" + request.getParameter("user") + "'";Statement stmt = connection.createStatement();ResultSet rs = stmt.executeQuery(query);

Wenn ein Angreifer admin' OR '1'='1 übergibt, erhält er Zugriff auf alle Benutzer.

Wie man sich schützt

  • Verwenden Sie PreparedStatement: parametrisierte Abfragen maskieren die Eingabe automatisch.
  • Validieren Sie Eingabedaten serverseitig (Whitelists).
  • Für LDAP und Betriebssystembefehle verwenden Sie Maskierung und vermeiden Sie den Aufruf von Runtime.exec() mit Benutzerdaten.
// Sicherer AnsatzString query = "SELECT * FROM users WHERE username = ?";PreparedStatement pstmt = connection.prepareStatement(query);pstmt.setString(1, request.getParameter("user"));ResultSet rs = pstmt.executeQuery();


2. Fehlerhafte Authentifizierung und Session-Management

Schwache Authentifizierung ist die zweitgefährlichste Schwachstelle. Häufig anzutreffen sind: fehlende Begrenzung der Anmeldeversuche, Speicherung von Passwörtern im Klartext, vorhersagbare Session-IDs.

Empfehlungen

  • Speichern Sie Passwörter nur als gehashte Werte mit Salt (z. B. bcrypt oder Argon2).
  • Verwenden Sie SecureRandom zur Generierung von Session-Tokens.
  • Setzen Sie Session-Timeout und einen „Angemeldet bleiben“-Mechanismus mit sicherem Token ein.
// Generierung einer sicheren Session-IDimport java.security.SecureRandom;String sessionId = new SecureRandom().ints(48, 122)    .filter(i -> Character.isLetterOrDigit(i))    .limit(64)    .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)    .toString();


3. XSS (Cross-Site Scripting)

XSS ermöglicht das Einschleusen von schädlichem JavaScript in eine Seite, die von anderen Benutzern betrachtet wird. Dies ist besonders gefährlich für Webanwendungen in Java mit JSP oder Thymeleaf.

Beispiel für eine Schwachstelle

<div>${userComment}</div>

Wenn userComment <script>alert('XSS')</script> enthält, wird der Code im Browser ausgeführt.

Schutz

  • Maskieren Sie die Ausgabe: Verwenden Sie in JSP c:out oder fn:escapeXml().
  • Für Thymeleaf ist th:utext gefährlich, verwenden Sie th:text.
  • Wenden Sie Content Security Policy (CSP)-Header an.


4. Unsichere Deserialisierung

Java-Deserialisierung ist eine der kritischsten Schwachstellen, die die Ausführung von beliebigem Code (RCE) ermöglicht. Ein Angreifer kann den Bytestrom manipulieren und ein schädliches Objekt einschleusen.

Beispiel für einen Angriff

ObjectInputStream ois = new ObjectInputStream(request.getInputStream());Object obj = ois.readObject(); // Gefahr!

Wie man sich schützt

  • Deserialisieren Sie keine

Blogs

Buchempfehlungen