Sicherheit von Java-Anwendungen: Die Top-10 Schwachstellen in der Praxis

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: Die Top-10 Schwachstellen in der Praxis



Die Sicherheit von Java-Anwendungen ist nicht nur ein Häkchen auf einer Checkliste, sondern ein kritisch wichtiger Aspekt der Entwicklung. Laut OWASP enthalten über 70 % der modernen Webanwendungen mindestens eine kritische Schwachstelle. In diesem Artikel analysieren wir die 10 häufigsten Bedrohungen mit realen Codebeispielen und Möglichkeiten zu deren Behebung. Das Material ist sowohl für Anfänger als auch für erfahrene Java-Entwickler nützlich.



1. SQL-Injection

SQL-Injection bleibt die führende Schwachstelle. Ein Angreifer kann bösartigen SQL-Code über Benutzereingaben einschleusen.



Verwundbarer Code:

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


Korrigierter Code (Verwendung von PreparedStatement):

String query = "SELECT * FROM users WHERE username = ?";PreparedStatement pstmt = connection.prepareStatement(query);pstmt.setString(1, username);ResultSet rs = pstmt.executeQuery();


2. XSS (Cross-Site Scripting)

XSS-Angriffe ermöglichen das Einschleusen von Client-Skripten in Webseiten. Der wichtigste Schutz ist die Ausgabe-Kodierung.



Verwundbarer Code (JSP):

<%= request.getParameter("comment") %>


Korrigierter Code:

<%= Encode.forHtml(request.getParameter("comment")) %>


Verwenden Sie die OWASP Java Encoder-Bibliothek für zuverlässige Kodierung:

import org.owasp.encoder.Encode;String safeOutput = Encode.forHtml(userInput);


3. Unsichere Deserialisierung

Java-Deserialisierung kann zur Remote Code Execution (RCE) führen.



Verwundbarer Code:

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


Schutzempfehlungen:

  • Deserialisieren Sie keine Daten aus unsicheren Quellen
  • Verwenden Sie eine Whitelist von Klassen bei der Deserialisierung
  • Nutzen Sie JSON oder XML anstelle von Java-Serialisierung


// Sicherer Ansatz mit KlassenprüfungObjectInputStream ois = new ObjectInputStream(inputStream) {    @Override    protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {        if (!allowedClasses.contains(desc.getName())) {            throw new InvalidClassException(desc.getName(), "Unauthorized deserialization");        }        return super.resolveClass(desc);    }};


4. CSRF (Cross-Site Request Forgery)

CSRF-Angriffe zwingen einen Benutzer dazu, unerwünschte Aktionen auf einer Website auszuführen, bei der er authentifiziert ist.



Schutz mit Tokens (Spring Security):

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());    }}


Hinzufügen des Tokens im Formular:

<form action="/transfer" method="POST">    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>    <input type="text" name="amount"/>    <button type="submit">Überweisen</button></form>


5. Informationsleck durch Ausnahmen

Detaillierte Fehlermeldungen können die interne Struktur der Anwendung offenlegen.



Verwundbarer Code:

try {    // Geschäftslogik} catch (SQLException e) {    response.getWriter().println("Fehler: " + e.getMessage()); // Datenleck!}


<

Blogs

Buchempfehlungen