SQL injection adalah jenis serangan keamanan di mana penyerang memasukkan perintah SQL berbahaya ke dalam input pengguna atau parameter query untuk mendapatkan akses tidak sah atau mengakses data yang tidak seharusnya dapat diakses. Salah satu cara paling efektif untuk mencegah serangan SQL injection adalah dengan menggunakan prepared statements.
Prepared statements adalah fitur yang disediakan oleh banyak basis data dan API klien database (termasuk MySQLi untuk PHP) yang memungkinkan Anda memisahkan perintah SQL dari data pengguna. Saat menggunakan prepared statements, query SQL dan data yang dimasukkan oleh pengguna dipisahkan, sehingga bahaya injeksi SQL dapat dikurangi atau dihilangkan sepenuhnya.
Berikut adalah poin-poin kunci terkait dengan penggunaan prepared statements:
- Parameter Binding: Prepared statements memungkinkan Anda mengikat parameter atau variabel ke dalam pernyataan SQL. Ini berarti bahwa nilai dari parameter tersebut tidak digabungkan secara langsung ke dalam pernyataan SQL, melainkan disertakan sebagai data terpisah.
- Mencegah Concatenation SQL: Daripada menggunakan konkatenasi string untuk menyisipkan nilai variabel ke dalam query SQL, prepared statements menggunakan tanda tanya (
?) sebagai placeholder untuk nilai yang akan dimasukkan. - Menghindari Karakter Khusus: Prepared statements secara otomatis menangani karakter khusus, seperti tanda kutip, yang dapat digunakan untuk merusak sintaks SQL. Nilai yang dimasukkan sebagai parameter akan dihindari dari bahaya ini.
Dengan menggunakan prepared statements, Anda dapat memastikan bahwa query SQL yang dieksekusi adalah aman dari serangan SQL injection. Berikut adalah contoh penggunaan prepared statements dalam PHP menggunakan MySQLi Procedural:
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$query = "SELECT * FROM users WHERE username = ?";
$stmt = mysqli_prepare($conn, $query);
mysqli_stmt_bind_param($stmt, "s", $username);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
// ...
mysqli_stmt_close($stmt);
Penting untuk selalu menggunakan prepared statements dan fungsi pengamanan data seperti mysqli_real_escape_string untuk mencegah kerentanan keamanan seperti SQL injection.
![]()

