Verwendung von Prepared Statements

Abfragen einer PostgreSQL-Datenbank in Java

Miller Trujillo

Staff Software Engineer

Das Problem mit Statements

String query = "SELECT * FROM books WHERE title = '" + title + "'";
stmt.executeQuery(query);
  • SQL-Injection passiert, wenn Benutzereingaben direkt in SQL eingebettet werden
String title = "' OR 1 = 1 --";
  • Angreifer können die Logik der Abfrage ändern
String query = "SELECT * FROM books WHERE title = '' OR 1 = 1 --'";

$$

  • SQL-Injection kann unsere Daten ändern 🚫
Abfragen einer PostgreSQL-Datenbank in Java

SQL-Injection

String query = "SELECT * FROM books WHERE title = '" + title + "'";
stmt.executeQuery(query);
title = "'; DELETE FROM books; --"
query = "SELECT * FROM books WHERE title = ''; DELETE FROM books; -- REST of query"
  • Alle Datensätze werden gelöscht 🔄

$$

  • Berechtigungen zu beschränken hilft, reicht aber nicht aus
  • Angreifer können trotzdem auf sensible Daten zugreifen
Abfragen einer PostgreSQL-Datenbank in Java

Prepared Statements

  • Vorgefertigte SQL-Anweisung mit Platzhaltern
String sql = "SELECT * FROM books WHERE title = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "Alice in Wonderland");
ResultSet rs = pstmt.executeQuery();
  • Parameter werden als Daten behandelt, nie als ausführbares SQL 🔒
Abfragen einer PostgreSQL-Datenbank in Java

Arbeiten mit mehreren Parametern

String sql = "SELECT * FROM books WHERE title = ? AND publication_year = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "Alice in Wonderland"); pstmt.setInt(2, 1998);
ResultSet rs = pstmt.executeQuery();
  • Jeder Datentyp hat seine eigene Setter-Methode
Abfragen einer PostgreSQL-Datenbank in Java

Lass uns üben!

Abfragen einer PostgreSQL-Datenbank in Java

Preparing Video For Download...