Menggunakan Pernyataan Tersiap

Melakukan Query ke Basis Data PostgreSQL di Java

Miller Trujillo

Staff Software Engineer

Masalah dengan Pernyataan

String query = "SELECT * FROM books WHERE title = '" + title + "'";
stmt.executeQuery(query);
  • Injeksi SQL terjadi saat input pengguna dimasukkan langsung ke SQL
String title = "' OR 1 = 1 --";
  • Penyerang dapat mengubah logika kueri
String query = "SELECT * FROM books WHERE title = '' OR 1 = 1 --'";

$$

  • Injeksi SQL dapat memodifikasi data kita 🚫
Melakukan Query ke Basis Data PostgreSQL di Java

Injeksi SQL

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"
  • Semua catatan akan dihapus 🔄

$$

  • Membatasi izin membantu, tetapi tidak cukup
  • Penyerang masih dapat mengakses data sensitif
Melakukan Query ke Basis Data PostgreSQL di Java

Pernyataan Tersiap

  • Pernyataan SQL yang sudah dikompilasi menggunakan placeholder
String sql = "SELECT * FROM books WHERE title = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "Alice in Wonderland");
ResultSet rs = pstmt.executeQuery();
  • Parameter di-escape dan diperlakukan sebagai data, bukan SQL yang dapat dieksekusi 🔒
Melakukan Query ke Basis Data PostgreSQL di Java

Bekerja dengan Banyak Parameter

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();
  • Setiap tipe data memiliki metode setter sendiri
Melakukan Query ke Basis Data PostgreSQL di Java

Ayo berlatih!

Melakukan Query ke Basis Data PostgreSQL di Java

Preparing Video For Download...