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
'atauOR 1=1mengubah struktur perintah SQL. - Dapat dieksploitasi oleh
sqlmapuntuk 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=1tidak akan pernah dieksekusi sebagai sintaks SQL.
Secure Output Result
| ID | Username | Role | Bio | |
|---|---|---|---|---|
1 |
admin | admin@sqli-lab.local | administrator | System Administrator account for security lab testing. |