SQL injection: pencegahan dan bukti perbaikan
SQL injection terjadi ketika masukan mengubah susunan perintah ke database. Pisahkan nilai masukan dari kueri, periksa bagian dinamis, lalu uji kembali fungsi dan batas aksesnya.
Di halaman ini
Apa itu SQL injection?
SQL injection terjadi ketika aplikasi menyusun perintah database dengan cara yang memungkinkan masukan pengguna mengubah makna perintah tersebut. Jalurnya dapat berada pada pencarian, filter, impor, maupun laporan yang berjalan di belakang layar.
Masalah utamanya bukan karena pengguna boleh mengetik tanda tertentu. Aplikasi perlu memisahkan struktur kueri dari nilai yang dimasukkan. Menghapus tanda petik dapat merusak data sah tanpa menyelesaikan seluruh penyebab.
Contoh: pencarian nomor tagihan
Tim fiktif menyediakan pencarian tagihan berdasarkan nomor yang diketik pengguna. Kode lama menggabungkan nomor itu langsung ke teks SQL. Pada perbaikan, pengembang menetapkan kueri terlebih dahulu lalu mengirim nomor sebagai parameter melalui fasilitas driver database.
Pengujian memakai tagihan buatan. Nomor yang ada mengembalikan hasil yang benar; nilai yang tidak ada tidak menghasilkan tagihan lain. Tim juga memastikan pengguna hanya memperoleh tagihan miliknya. Kueri berparameter mencegah perubahan instruksi, tetapi tidak otomatis memberikan otorisasi yang benar.
Apa yang perlu diperiksa pada kode?
- Gunakan prepared statement atau kueri berparameter untuk nilai masukan.
- Periksa kueri mentah di dalam ORM; memakai ORM tidak membuat semua gabungan teks aman.
- Untuk pilihan kolom atau arah pengurutan, petakan pilihan pengguna ke nilai tetap yang diizinkan oleh kode. Placeholder nilai umumnya tidak menggantikan nama tabel atau kolom.
- Tinjau prosedur tersimpan jika di dalamnya masih ada SQL dinamis yang dibentuk dari masukan.
- Batasi akun database aplikasi pada operasi dan tabel yang benar-benar diperlukan.
Validasi format tetap diperlukan untuk kebutuhan bisnis. Namun, validasi bukan pengganti pemisahan nilai dan instruksi. Akun aplikasi juga tidak perlu diberi kewenangan administrator hanya agar semua kueri berhasil.
Cara menerima hasil perbaikan
| Pemeriksaan pada data uji | Hasil yang dicatat |
|---|---|
| Pencarian biasa dan nilai tidak dikenal | Hasil sesuai fungsi, tanpa data tambahan |
| Pilihan kolom/urutan yang tidak didukung | Ditolak atau dipetakan sesuai aturan yang terdokumentasi |
| Akun pelanggan lain membuka hasil | Akses tetap ditolak meskipun nomor tagihan diketahui |
| Jalur impor atau laporan terkait | Pola kueri berisiko yang sama ikut diperbaiki |
Simpan versi kode, jalur yang ditinjau, identitas kasus uji, dan hasil retest. Respons tanpa pesan error SQL bukan satu-satunya bukti keamanan. Jangan menguji database produksi tanpa lingkup dan izin yang sesuai.
Hubungkan dengan proses tim
Masukkan temuan ke pengembangan aplikasi yang aman. Periksa terpisah akses melewati izin pengguna, karena perbaikannya menjawab masalah yang berbeda.
Sumber rujukan
- SQL Injection Prevention Cheat Sheet ↗OWASP Foundation; panduan teknis keamanan aplikasi · Prepared Statements; Allow-list Input Validation; Least Privilege
- OWASP A05:2025 — Injection ↗OWASP Top 10 Team; rujukan teknis, CC BY 3.0 · Description; How to prevent
Baca naskah lengkap untuk melihat syarat dan pengecualiannya. Sesuaikan dengan layanan dan bidang usaha Anda.
Perlu membahas kebutuhan tim Anda?
Ceritakan sistem yang dikelola dan kebutuhan pengamanan tim Anda.
Konsultasikan kebutuhan Anda