flawopen.com/sql-injection/Php
Learn how to fix SQL Injection (CWE-89) in PHP. Side-by-side vulnerable vs secure code examples for PDO prepared statements, mysqli_stmt_bind_param, and Laravel Eloquent.
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.
Web Application SecurityCWE-89.CWE-89Defense-in-DepthPenyerang mengirimkan input berisi karakter sintaks SQL (misal: ' OR '1'='1) melalui parameter HTTP.
Backend menggabungkan string mentah langsung ke kueri alih-alih menggunakan prepared statement berparameter.
Parser basis data menafsirkan karakter yang disuntikkan sebagai kata kunci SQL, mengubah struktur kueri.
Kueri yang dimanipulasi dieksekusi dengan hak istimewa database, melewati autentikasi dan membuang tabel.
// $_GET value straight into the query
$query = "SELECT * FROM users
WHERE id = " . $_GET['id'];
$result = $mysqli->query($query);
// value is bound, never concatenated
$stmt = $pdo->prepare(
"SELECT * FROM users WHERE id = :id"
);
$stmt->execute(['id' => $_GET['id']]);
$result = $stmt->fetch();
addslashes() or manual escaping as the primary defense.