![]() |
| Ilustrasi SQL Injection. Sumber: dqlab.id |
Cara Mencegah SQL Injection agar Data Website Terlindungi
SQL Injection merupakan salah satu serangan siber paling berbahaya yang menargetkan sistem basis data sebuah website, Serangan ini terjadi ketika penyerang menyisipkan perintah SQL berbahaya ke dalam input pengguna yang tidak difilter dengan baik, sehingga mereka dapat membaca, memodifikasi, bahkan menghapus data penting.
Agar website tetap aman, pemilik maupun pengembang harus memahami cara kerja SQL Injection serta langkah-langkah pencegahannya. Berikut penjelasan lengkapnya.
Apa Itu SQL Injection?
SQL Injection adalah teknik serangan di mana penyerang memanfaatkan celah pada input form seperti login, pencarian, atau parameter URL untuk menyisipkan query SQL berbahaya. Jika aplikasi tidak memvalidasi input, query tersebut akan dijalankan oleh database.
Contoh sederhana input berbrahaya:
' OR '1'='1
Jika tidak difilter, input ini bisa membuat penyerang masuk tanpa login atau mengakses data sensitif.
Mengapa SQL Injection Berbahaya?
Jika serangan berhasil, penyerang bisa:
- Mengambil data sensitif (password, email, data pelanggan)
- Menghapus atau mengubah data pada database
- Mengendalikan akun admin
- Merusak integritas sistem
- Mengendalikan server jika celah dikombinasikan dengan teknik lain
Cara Mencegah SQL Injection
1. Gunakan Prepared Statements (Parameterized Query)
Metode ini merupakan cara paling ampuh untuk menghindari SQL Injection. Prepared statement memisahkan antara perintah SQL dan data pengguna, sehingga input tidak akan pernah dianggap sebagai bagian dari perintah.
Contoh aman (PHP - PDO):
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
$stmt->execute([$email]);
Contoh aman (Node.js - MySQL):
db.query("SELECT * FROM users WHERE email = ?", [email]);
2. Validasi dan Sanitasi Input Pengguna
Selalu batasi jenis input yang boleh masuk:
- Gunakan whitelist (misal: hanya angka 0-9 untuk ID)
- Batasi panjang input
- Tolak karakter berbahaya jika diperlukan
Contoh validasi sederhana (PHP):
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Email tidak valid");
}
3. Gunakan ORM (Object Relational Mapping)
Framework modern seperti Laravel, Djancgo, atau Prisma menggunakan ORM yang otomatis mencegah SQL Injection.
Contoh ORM (Laravel Eloquent):
$user = User::where('email', $email)->first();
4. Simpan Data Sensitif Menggunakan Hashing
Jika SQL Injection terjadi, password yang disimpan secara plain text bisa langsung dicuri. Selalu gunakan hasing seperti bcrpyt, argon2, atau sha256 dengan salt.
5. Terapkan Pengaturan Hak Akses di Database
Jangan berikan akses penuh pada setiap user database.
- Gunakan prinsip least privilege
- User aplikasi hanya boleh SELECT/INSERST?UPDATE, buakn DROP TABLE atau DELETE tanpa batas
6. Gunakan Firewall Aplikasi (WAF)
Web Application Firewall dapat mendeteksi dan memblokir pola serangan SQL Injection secara otomatis.
Contoh WAF:
- Cloudflare WAF
- ModSecurity
- AWS WAF
7. Selalu Perbarui Framework, Library, dan Server
Banyak celah keamanan berasal dari bersi lama:
- PHP lama tanpa patch
- Plugin CMS tidak perbarui
- Framework dengan bug SQL Injection
Update rutin adalah bentuk perlindungan yang sangat penting.
8. Lakukan Penetration Testing Secara Berkala
Tes keamanan dapat mendeteksi celah sebelum penyerang memanfaatkan.
Metode Pengujian:
- SQLMap
- OWASP ZAP
- Burp Suite
Penetration testing membuat aplikasi tetap terpantau aman dari waktu ke waktu
SQL Injection merupakan ancaman serius bagi keamanan wabsite, namun risiko ini dapat diminimalkan dengan praktik dengan praktik pengembangan yang aman. Langkah-langkah seperti menggunakan prepared statements, melakukan validasi input, memanfaatkan ORM, dan menerapkan WAF adalah langkah wajib yang harus diterapkan setiap developer.

Posting Komentar