Saya menyadari bahwa kueri SQL berparameter adalah cara optimal untuk membersihkan masukan pengguna saat membuat kueri yang berisi masukan pengguna, tetapi saya bertanya-tanya apa yang salah dengan mengambil masukan pengguna dan melepaskan tanda kutip tunggal dan mengelilingi seluruh string dengan tanda kutip tunggal. Berikut kodenya:
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
Kutipan tunggal apa pun yang dimasukkan pengguna diganti dengan tanda kutip tunggal ganda, yang menghilangkan kemampuan pengguna untuk mengakhiri string, jadi apa pun yang mereka ketik, seperti titik koma, tanda persen, dll., Semuanya akan menjadi bagian dari string dan tidak benar-benar dijalankan sebagai bagian dari perintah.
Kami menggunakan Microsoft SQL Server 2000, yang menurut saya kutipan tunggal adalah satu-satunya pemisah string dan satu-satunya cara untuk keluar dari pemisah string, jadi tidak ada cara untuk mengeksekusi apa pun yang diketik pengguna.
Saya tidak melihat cara untuk meluncurkan serangan injeksi SQL terhadap ini, tetapi saya menyadari bahwa jika ini antipeluru seperti yang terlihat bagi saya, orang lain akan memikirkannya dan itu akan menjadi praktik umum.
Ada apa dengan kode ini? Apakah ada cara untuk mendapatkan serangan injeksi SQL melewati teknik sanitasi ini? Contoh masukan pengguna yang memanfaatkan teknik ini akan sangat membantu.
MEMPERBARUI:
Saya masih tidak tahu cara apa pun untuk meluncurkan serangan injeksi SQL secara efektif terhadap kode ini. Beberapa orang menyarankan bahwa garis miring terbalik akan keluar dari satu kutipan tunggal dan membiarkan yang lain mengakhiri string sehingga sisa string akan dieksekusi sebagai bagian dari perintah SQL, dan saya menyadari bahwa metode ini akan berfungsi untuk menyuntikkan SQL ke dalam database MySQL, tetapi di SQL Server 2000 satu-satunya cara (yang dapat saya temukan) untuk keluar dari kutipan tunggal adalah dengan kutipan tunggal lainnya; garis miring terbalik tidak akan berhasil.
Dan kecuali jika ada cara untuk menghentikan pelolosan kutipan tunggal, tidak ada input pengguna lainnya yang akan dieksekusi karena semuanya akan diambil sebagai satu string yang berdekatan.
Saya memahami bahwa ada cara yang lebih baik untuk membersihkan masukan, tetapi saya benar-benar lebih tertarik untuk mempelajari mengapa metode yang saya berikan di atas tidak berfungsi. Jika ada yang tahu cara khusus untuk memasang serangan injeksi SQL terhadap metode sanitasi ini, saya akan senang melihatnya.