Sicherheit von Java-Anwendungen: Top-10-Schwachstellen für Anfänger

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

Sicherheit von Java-Anwendungen: Top-10-Schwachstellen für Anfänger

\n

Java bleibt eine der beliebtesten Sprachen für die Entwicklung von Unternehmens- und Webanwendungen. Allerdings garantiert selbst eine zuverlässige Plattform keine Codesicherheit. Laut OWASP sind die meisten Hacks auf Entwicklerfehler zurückzuführen, nicht auf Schwachstellen in der JVM. In diesem Artikel behandeln wir die Top-10-Schwachstellen von Java-Anwendungen, die jeder angehende Entwickler kennen sollte. Sie erhalten nicht nur theoretisches Wissen, sondern auch praktische Codebeispiele mit Erklärungen, wie Sie gefährliche Fehler vermeiden.

\n\n

1. SQL-Injection

\n

Die häufigste Bedrohung. Ein Angreifer kann eine beliebige SQL-Abfrage ausführen, wenn Sie Zeichenfolgen direkt verketten.

\n

Schlechtes Beispiel (anfälliger Code):

\n
String query = "SELECT * FROM users WHERE username = '" + userName + "' AND pass = '" + password + "'";\nStatement stmt = connection.createStatement();\nResultSet rs = stmt.executeQuery(query);
\n

Lösung: Verwenden Sie PreparedStatement mit parametrisierten Abfragen.

\n
String query = "SELECT * FROM users WHERE username = ? AND pass = ?";\nPreparedStatement pstmt = connection.prepareStatement(query);\npstmt.setString(1, userName);\npstmt.setString(2, password);\nResultSet rs = pstmt.executeQuery();
\n\n

2. Cross-Site-Scripting (XSS)

\n

Wenn Sie Benutzerdaten ohne Escape in HTML ausgeben, kann ein Angreifer JavaScript-Code einschleusen.

\n

Anfälliger Code (JSP):

\n
<%= request.getParameter("message") %>
\n

Schutz: Escapen Sie die Ausgabe mit Bibliotheken (z. B. OWASP Java Encoder) oder verwenden Sie Template-Engines mit automatischem Escaping (Thymeleaf, JSP mit JSTL).

\n
<c:out value="${message}" />
\n\n

3. Unsichere Deserialisierung

\n

Java-Deserialisierung kann zu Remote Code Execution (RCE) führen, wenn ein Angreifer einen speziell präparierten Byte-Stream übergibt.

\n

Schlechte Praxis:

\n
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());\nObject obj = ois.readObject(); // alles kann wiederhergestellt werden
\n

Empfehlungen:

\n
    \n
  • Deserialisieren Sie niemals Daten aus nicht vertrauenswürdigen Quellen.
  • \n
  • Verwenden Sie Whitelists für Klassen (Look-Ahead Object Input Stream).
  • \n
  • Ziehen Sie Alternativen in Betracht (JSON, Protobuf).
  • \n
\n\n

4. OS-Kommando-Injection (Command Injection)

\n

Wenn Ihre Anwendung Systembefehle mit Benutzerdaten aufruft, ist eine Injection möglich.

\n

Gefährlicher Code:

\n
Runtime.getRuntime().exec("ping " + userInput); // userInput = 127.0.0.1; rm -rf /
\n

Schutz: Vermeiden Sie den Aufruf von Shell-Befehlen, verwenden Sie integrierte Java-Bibliotheken. Wenn der Aufruf unvermeidbar ist – validieren Sie die Eingabedaten mit einer strengen Whitelist.

\n\n

5. Mängel bei der Authentifizierung und Sitzungsverwaltung

\n

Schwacher Sitzungsschutz ist ein häufiges Problem. Zum Beispiel die Verwendung vorhersagbarer Sitzungs-IDs oder die Speicherung von Passwörtern im Klartext.

\n
    \n
  • Generieren Sie Sitzungs-IDs mit SecureRandom.
  • \n
  • Verwenden Sie moderne Hash-Verfahren (bcrypt, scrypt, Argon2) für Passwörter.
  • \n
  • Legen Sie Sitzungs-Timeout und die Flags HttpOnly/Secure für Cookies fest.
  • \n
\n\n

6. Unsichere Konfiguration (Security Misconfiguration)

\n

Zurückgelassene Debug-Modi, Standard-Passwörter, offene Ports – all das gibt einem Angreifer Informationen über das System.

\n

Was Sie in Spring Boot überprüfen sollten:

\n
    \n
  • Deaktivieren Sie Actuator-Endpunkte in der Produktion oder schützen Sie sie.
  • \n
  • Verwenden Sie spring.jpa.show-sql=true nicht in der Produktion.
  • \n
  • Entfernen Sie Standard-Server-Header

Blogs

Buchempfehlungen