1. Pendahuluan

Dalam pengembangan aplikasi web modern, integritas data adalah prioritas utama. Salah satu ancaman

keamanan yang paling gigih dan berbahaya adalah SQL Injection (SQLi). Serangan ini menempati peringkat atas dalam daftar OWASP Top 10 selama bertahun-tahun. Artikel ini bertujuan untuk mendemonstrasikan bagaimana celah SQLi terjadi melalui eksperimen langsung dan menjelaskan langkah-langkah teknis untuk memitigasi risiko tersebut, guna membangun aplikasi web yang lebih tangguh.

2. Memahami SQL Injection

SQL Injection adalah teknik di mana penyerang memasukkan perintah SQL berbahaya ke dalam input field aplikasi web. Tujuannya adalah untuk memanipulasi query yang dikirim ke database. Jika aplikasi tidak melakukan sanitasi input dengan benar, penyerang dapat membaca data sensitif (seperti password), memodifikasi database, atau bahkan mendapatkan akses administratif.

3. Eksperimen: Simulasi Kerentanan

Untuk memahami konsep ini, saya melakukan eksperimen menggunakan lingkungan server lokal (XAMPP) dengan skrip PHP sederhana sebagai berikut:

A. Kode yang Rentan (Vulnerable Code)

// Skrip login sederhana yang rentan

$username = $_POST['username'];

$password = $_POST['password'];

$sql = "SELECT * FROM users WHERE username = '$username' AND password =

'$password'";

$result = $conn->query($sql);

B. Langkah-Langkah Eksperimen

  1. Input Normal: Memasukkan username dan password yang benar. Hasil: Pengguna berhasil login.
  2. Payload Serangan: Pada field username, saya memasukkan payload: admin' –
  3. Analisis Query: Query yang dieksekusi oleh database menjadi:

SELECT * FROM users WHERE username = 'admin' – ' AND password =

'…'

Hasil Eksperimen: Karakter kutip tunggal (') memutus string, dan karakter – (double dash)

menganggap sisa query sebagai komentar. Hasilnya, saya berhasil login sebagai 'admin' tanpa mengetahui password sama sekali.

4. Mitigasi: Menggunakan Prepared Statements

Cara paling efektif untuk mencegah SQLi adalah dengan menggunakan Prepared Statements atau

Parameterized Queries. Teknik ini memisahkan struktur query SQL dari data input pengguna.

Perbaikan Kode:

// Menggunakan PDO untuk keamanan

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :user');

$stmt->execute(['user' => $username]);

$user = $stmt->fetch();

5. Analisis dan Perbandingan

Metode Tingkat

Keamanan Keterangan

String Concatenation Sangat Rendah Input langsung digabung ke query. Sangat mudah

diserang.

(addslashes) Sanitasi Manual

Sedang Masih memiliki celah pada encoding karakter

tertentu.

Prepared Statements Tinggi Standar industri saat ini. Menghilangkan risiko SQLi secara total.

6. Kesimpulan

Eksperimen ini menunjukkan bahwa celah keamanan sekecil apapun pada input form dapat berakibat

fatal. Sebagai pengembang, kita tidak boleh mempercayai input yang datang dari pengguna. Penggunaan

Prepared Statements adalah kewajiban dalam pemrograman web modern untuk memastikan aplikasi

terhindar dari manipulasi basis data yang merugikan.

Referensi

  1. OWASP Foundation. "SQL Injection Prevention Cheat Sheet".
  2. 2. PHP Documentation. "PDO Class – Prepared Statements".
  3. 3. W3Schools. "Web Security – SQL Injection."