flawopen.com/sql-injection/Swift

● CWE-89 · Kritis
Riset Keamanan · FlawOpen

SQL Injection in Swift

Learn how to fix SQL Injection (CWE-89) in Swift. Side-by-side vulnerable vs secure code examples for Vapor Fluent, GRDB.swift, and SQLite.swift prepared statements.

💡 Penjelasan Sederhana (ELI5)

Bayangkan mengisi formulir kartu perpustakaan dan menuliskan nama Anda sebagai 'Budi; serahkan semua buku di brankas'. Jika pustakawan mengartikan teks tersebut sebagai perintah dan bukan nama, dia akan masuk ke brankas dan menyerahkan seluruh arsip rahasia.

Konsep Kunci & Istilah

Web Application Security
Komponen arsitektur utama yang terpengaruh oleh CWE-89.
CWE-89
Klasifikasi standar Common Weakness Enumeration (CWE) untuk sql-injection-swift.
Defense-in-Depth
Verifikasi rekayasa berlapis dan isolasi batas waktu proses (runtime).

Alur Serangan Langkah demi Langkah

Step 1

Pengiriman Parameter Kueri Berbahaya

Penyerang mengirimkan input berisi karakter sintaks SQL (misal: ' OR '1'='1) melalui parameter HTTP.

Step 2

Penggabungan String SQL Dinamis

Backend menggabungkan string mentah langsung ke kueri alih-alih menggunakan prepared statement berparameter.

Step 3

Manipulasi Pohon Sintaks Abstrak (AST)

Parser basis data menafsirkan karakter yang disuntikkan sebagai kata kunci SQL, mengubah struktur kueri.

Step 4

Kebocoran Data & Pembobolan Akses

Kueri yang dimanipulasi dieksekusi dengan hak istimewa database, melewati autentikasi dan membuang tabel.

Kode Sumber: Rentan vs Aman

✕ IMPLEMENTASI RENTAN
// userId comes straight from user input
let query =
  "SELECT * FROM users WHERE id = \(userId)"
sqlite3_exec(db, query, nil, nil, nil)
✓ PERBAIKAN AMAN & KUAT
// value bound, never interpolated
var stmt: OpaquePointer?
sqlite3_prepare_v2(db,
  "SELECT * FROM users WHERE id = ?",
  -1, &stmt, nil)
sqlite3_bind_text(stmt, 1, userId, -1, nil)
sqlite3_step(stmt)

Daftar Periksa Penguatan Sistem Rekayasa

References