SQL injection: kesalahan lama yang tidak mau tua
Ditemukan puluhan tahun lalu, masih masuk daftar kerentanan tahun ini. SQL injection bertahan karena mudah ditulis dan mahal untuk diperbaiki setelah terlambat.
Kenapa ia bertahan
Karena ia lahir dari pola yang terasa natural: menyusun kalimat SQL dengan menempel string. Contoh paling klasik adalah query pencarian yang digabung dengan input pengguna. Selama ada satu tempat yang menempel string, satu tempat itu cukup.
Sistem lama juga masih hidup di produksi jauh lebih lama dari yang orang perkirakan, dan kode warisan jarang diaudit ulang.
Satu aturan yang menyelesaikan 99 persen kasus
Query berparameter. Selalu. Data pengguna dikirim sebagai data, bukan dirangkai sebagai kode. Di hampir semua bahasa modern ini sudah jadi default ORM dan driver database, jadi ia hanya muncul lagi saat developer menulis SQL mentah dengan string.
Untuk kasus dinamis seperti nama tabel atau arah urutan, gunakan allowlist yang ketat, bukan sanitasi. Bandingkan input dengan daftar nilai yang diizinkan, tolak sisanya.
Kalau mewarisi kode lama
Jangan berusaha memperbaiki semuanya sekaligus. Cari titik masuk yang bisa diakses tanpa login dulu, perbaiki itu. Lalu titik yang menyentuh data sensitif. Deteksi runtime dan WAF boleh jadi tambalan sementara, tapi jangan pernah dianggap perbaikan.