Sicherheit von Java-Anwendungen: Top-10 Schwachstellen – Teil 2
Im ersten Teil haben wir die ersten fünf kritischen Schwachstellen von Java-Anwendungen besprochen. Heute setzen wir die Schulung fort und betrachten die verbleibenden fünf Bedrohungen, die jeder Entwickler kennen sollte. Java für Anfänger und erfahrene Programmierer – diese Informationen helfen Ihnen, sichereren Code zu schreiben. In der Welt der Programmierung ist Sicherheit keine Option, sondern eine Notwendigkeit.
6. Externe XML-Entitäten (XXE)
XXE-Angriffe treten auf, wenn eine Anwendung XML-Dokumente verarbeitet, die Verweise auf externe Entitäten enthalten. Ein Angreifer kann lokale Dateien lesen, einen SSRF-Angriff durchführen oder einen Denial-of-Service verursachen.
Verwundbarer Code
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlData)));
Schutz
- Deaktivieren Sie externe Entitäten und DTD
- Verwenden Sie sichere Parser
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
7. Unsichere Deserialisierung
Die Deserialisierung nicht vertrauenswürdiger Daten kann zur Ausführung beliebigen Codes führen. Dies ist eine der gefährlichsten Schwachstellen in Java, da sie oft eine vollständige Kompromittierung des Servers ermöglicht.
Beispiel eines Angriffs
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.ser"));
Object obj = ois.readObject(); // gefährlich!
Schutzmethoden
- Deserialisieren Sie keine Daten aus nicht vertrauenswürdigen Quellen
- Verwenden Sie Whitelists für Klassen
- Nutzen Sie alternative Formate (JSON, Protocol Buffers)
8. SQL-Injection
Obwohl dies ein Klassiker der Programmierung ist, kommen SQL-Injection-Angriffe in Java-Anwendungen immer noch vor. Verwenden Sie stets parametrisierte Abfragen.
Falsch (verwundbar)
String query = "SELECT * FROM users WHERE name = '" + userName + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Richtig (sicher)
String query = "SELECT * FROM users WHERE name = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, userName);
ResultSet rs = pstmt.executeQuery();
Für Java für Anfänger sollte diese Regel ein Axiom sein: niemals Strings für SQL-Abfragen verketten.
9. Mängel bei der Authentifizierung und Sitzungsverwaltung
Schwache Authentifizierung, angreifbare Sitzungen und falsches Passwortmanagement sind häufige Probleme in Java-Webanwendungen.
Empfehlungen
- Verwenden Sie moderne Passwort-Hashing-Algorithmen (bcrypt, Argon2)
- Konfigurieren Sie eine korrekte Sitzungslebensdauer
- Setzen Sie sichere Cookies ein (HttpOnly, Secure, SameSite)
- Implementieren Sie die Multi-Faktor-Authentifizierung
10. Verwendung von Komponenten mit bekannten Schwachstellen
Das Java-Ökosystem ist reich an Bibliotheken, aber viele Projekte verwenden veraltete Versionen mit öffentlichen CVEs. Dies ist eines der häufigsten Sicherheitsprobleme.
Wie man sich schützt
- Aktualisieren Sie regelmäßig Ihre Abhängigkeiten
- Nutzen Sie Analysetools (OWASP Dependency-Check, Snyk)
- Abonnieren Sie Sicherheitsbenachrichtigungen für die verwendeten Bibliotheken
- Auto