Semua yang saya lihat pada serangan injeksi SQL tampaknya menunjukkan bahwa permintaan parametrized, terutama yang ada di prosedur tersimpan, adalah satu-satunya cara untuk melindungi terhadap serangan tersebut. Ketika saya bekerja (pada Abad Kegelapan) prosedur tersimpan dianggap sebagai praktik yang buruk, terutama karena mereka dianggap kurang dapat dipertahankan; kurang teruji; sangat berpasangan; dan mengunci sistem menjadi satu vendor; ( pertanyaan ini mencakup beberapa alasan lain).
Meskipun ketika saya sedang bekerja, proyek-proyek sebenarnya tidak menyadari kemungkinan serangan seperti itu; berbagai aturan diadopsi untuk mengamankan database terhadap berbagai macam korupsi. Aturan-aturan ini dapat diringkas sebagai:
- Tidak ada klien / aplikasi yang memiliki akses langsung ke tabel database.
- Semua akses ke semua tabel melalui tampilan (dan semua pembaruan ke tabel dasar dilakukan melalui pemicu).
- Semua item data memiliki domain yang ditentukan.
- Tidak ada item data yang boleh dibatalkan - ini memiliki implikasi yang membuat DBA menggiling gigi mereka kadang-kadang; tetapi ditegakkan.
- Peran dan izin ditetapkan dengan tepat - misalnya, peran terbatas untuk memberikan hanya pandangan hak untuk mengubah data.
Jadi apakah seperangkat aturan (ditegakkan) seperti ini (meskipun tidak harus set khusus ini) merupakan alternatif yang sesuai untuk pertanyaan parametrized dalam mencegah serangan injeksi SQL? Jika tidak, mengapa tidak? Bisakah suatu basis data diamankan dari serangan semacam itu dengan tindakan khusus (hanya) basis data?
EDIT
Penekanan pertanyaan sedikit berubah, mengingat respons awal yang diterima. Pertanyaan dasar tidak berubah.
EDIT2
Pendekatan mengandalkan queri paramaterized tampaknya hanya langkah periferal dalam pertahanan terhadap serangan pada sistem. Tampak bagi saya bahwa pertahanan yang lebih mendasar keduanya diinginkan, dan dapat membuat ketergantungan pada pertanyaan seperti itu tidak perlu, atau kurang kritis, bahkan untuk mempertahankan secara khusus terhadap serangan injeksi.
Pendekatan yang tersirat dalam pertanyaan saya didasarkan pada "menambah" database dan saya tidak tahu apakah itu pilihan yang layak. Penelitian lebih lanjut telah menyarankan bahwa ada pendekatan semacam itu. Saya telah menemukan sumber-sumber berikut yang menyediakan beberapa petunjuk untuk jenis pendekatan ini:
http://database-programmer.blogspot.com
http://thehelsinkideclaration.blogspot.com
Fitur utama yang saya ambil dari sumber-sumber ini adalah:
- Kamus data yang luas, dikombinasikan dengan kamus data keamanan yang luas
- Generasi pemicu, kueri, dan kendala dari kamus data
- Minimalkan Kode dan maksimalkan data
Sementara jawaban yang saya miliki sejauh ini sangat berguna dan menunjukkan kesulitan yang timbul karena mengabaikan pertanyaan yang bersifat paramaterisasi, pada akhirnya mereka tidak menjawab pertanyaan awal saya (sekarang ditekankan dengan huruf tebal).