Adaptif, Inovatif, Kreatif
Beranda
Tentang
Berita

Memahami SQL Injection dan Cara Pencegahannya dalam Pengembangan Aplikasi Aman

Penulis: Admin 14 July 2026
Memahami SQL Injection dan Cara Pencegahannya dalam Pengembangan Aplikasi Aman
SQL Injection (SQLi) adalah salah satu kerentanan keamanan siber (cybersecurity vulnerability) paling berbahaya dan klasik yang telah menduduki daftar teratas OWASP Top 10 selama lebih dari dua dekade. Artikel edukasi ini disusun khusus bagi mahasiswa dan developer agar memahami mekanisme kerentanan ini dan mampu membangun aplikasi web yang kebal terhadap serangan serupa. Bagaimana SQL Injection Terjadi? SQL Injection terjadi ketika developer menggabungkan (concat) input pengguna mentah secara langsung ke dalam string perintah query SQL tanpa melalui proses validasi atau pembersihan yang tepat. Contoh kode PHP yang RENTAN (Jangan dicontoh!): ```php $username = $_POST['username']; $password = $_POST['password']; // String query digabungkan secara langsung: $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; ``` Jika seorang penyerang memasukkan string `' OR '1'='1` pada kolom username, query SQL yang tereksekusi di database akan berubah drastis menjadi: `SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''` Karena kondisi `'1'='1'` selalu bernilai BENAR (True), klausa WHERE akan lolos dan penyerang dapat masuk ke dalam sistem sebagai administrator tanpa perlu mengetahui password yang sebenarnya! Cara Pencegahan Mutlak (Best Practice): 1. Gunakan Prepared Statements (Parameterized Queries): Ini adalah solusi utama dan wajib. Dengan Prepared Statements, database engine memisahkan secara tegas antara kode perintah SQL dengan parameter masukan pengguna. Jika parameter mengandung karakter sintaks SQL seperti tanda kutip tunggal (`'`), database tidak akan menganggapnya sebagai perintah SQL, melainkan kembalian nilai teks biasa. Contoh aman di PHP (PDO): ```php $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :user AND password = :pass'); $stmt->execute(['user' => $username, 'pass' => $password]); ``` Di Laravel, seluruh pemanggilan query melalui Eloquent ORM maupun Query Builder (`DB::table(...)`) telah menggunakan Prepared Statements secara otomatis di bawah kapnya. 2. Validasi dan Sanitasi Input: Selalu pastikan input yang diharapkan berjenis angka (`int`) benar-benar divalidasi sebagai tipe integer sebelum diolah lebih lanjut. 3. Principle of Least Privilege: Jangan pernah mengkoneksikan aplikasi web Anda ke database menggunakan akun pengguna tingkat superadmin (`root`). Berikan hak akses terbatas sesuai kebutuhan saja pada setiap akun koneksi aplikasi.