Contoh terisolasi ini kebal terhadap injeksi.
Namun perlu disadari bahwa perlindungan dari injeksi sql bukan hanya sekedar penggantian karakter . Dan keadaan mungkin berbeda dari yang Anda anggap remeh saat ini. Jadi, kode Anda akan menjadi rentan dalam jangka panjang, karena kelemahan mendasar dari metode ini :
- penggantian karakter hanyalah bagian pemformatan yang diperlukan
- penggantian khusus ini hanya dapat diterapkan pada senar, sehingga bagian lain benar-benar tidak terlindungi.
- penggantian semacam itu berada di luar eksekusi kueri, artinya ini rentan terhadap kesalahan manusia dalam bentuk apa pun.
- penggantian seperti itu pada dasarnya adalah ukuran yang dapat dilepas, artinya dapat dipindahkan terlalu jauh dari eksekusi kueri yang sebenarnya dan akhirnya dilupakan.
- pelarian semacam ini rentan terhadap serangan penyandian , membuat solusi terlalu terbatas dalam penggunaan.
Tidak ada yang salah dalam penggantian karakter itu sendiri, tetapi hanya jika itu digunakan sebagai bagian dari pemformatan lengkap; diterapkan ke bagian kueri yang tepat; dan dilakukan oleh driver database, bukan programmer; tepat sebelum eksekusi.
Fungsi yang Anda usulkan di komentar adalah langkah yang baik, tetapi masih belum mencukupi, karena kelemahan yang tercantum di atas, membuatnya rentan terhadap segala macam kesalahan manusia.
Dan injeksi SQL bukan satu-satunya masalah dengan pendekatan ini, ini juga merupakan kesalahan kegunaan, karena fungsi ini akan merusak data Anda, jika digunakan sebagai inkarnasi akhir kutipan ajaib , atau buat kode Anda membengkak, jika digunakan untuk memformat setiap variabel tepat di kode aplikasi.
Fungsi tersebut dapat digunakan hanya untuk memproses placeholder , tetapi tentu saja tidak dengan menggunakan fungsi pengganti buatan sendiri, tetapi fungsi yang tepat yang disediakan oleh database API.