Secure Defense Demonstration
Halaman ini mendemonstrasikan implementasi query yang aman dari SQL Injection menggunakan PDO Prepared Statement atau MySQLi Parameter Binding.
Interactive Prepared Statement Tester
Executed PHP Backend Code (PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $id]);
$user_data = $stmt->fetchAll();
Vulnerable Implementation High Risk

User input langsung digabungkan (concatenated) ke dalam string SQL sebelum dikirim ke server MySQL:

// BAD: Input pengguna digabung langsung
$query = "SELECT * FROM users WHERE id = " . $_GET['id'];
$res = mysqli_query($conn, $query);
  • Perintah SQL dan Data disatukan dalam 1 string.
  • Input karakter spesial seperti ' atau OR 1=1 mengubah struktur perintah SQL.
  • Dapat dieksploitasi oleh sqlmap untuk mengekstrak seluruh isi database.
Secure Implementation Protected

Struktur query SQL di-compile terlebih dahulu di server MySQL, lalu nilai input dikirim sebagai parameter literal:

// GOOD: Parameter binding terpisah
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $_GET['id']]);
$user_data = $stmt->fetchAll();
  • Perintah SQL dikompilasi terlebih dahulu (pre-compiled template).
  • Nilai input di-treat strictly sebagai data literal murni.
  • Payload seperti 1 OR 1=1 tidak akan pernah dieksekusi sebagai sintaks SQL.
Secure Output Result
ID Username Email Role Bio
1 admin admin@sqli-lab.local administrator System Administrator account for security lab testing.