Jika Anda tahu mengapa injeksi SQL terjadi, Anda akan dapat menjawab pertanyaan ini sendiri.
Ayo lihat. CWE menjelaskan injeksi SQL (CWE-89) sebagai berikut:
Selanjutnya:
Jadi pada dasarnya:input yang dipengaruhi secara eksternal dalam kueri SQL yang dihasilkan tidak ditafsirkan sebagaimana dimaksud. Bagian penting di sini adalah:tidak ditafsirkan sebagaimana dimaksud .
Jika input pengguna dimaksudkan untuk ditafsirkan sebagai string MySQL harfiah tapi tidak, ini adalah injeksi SQL. Tapi kenapa itu bisa terjadi?
Nah, literal string memiliki sintaks tertentu yang dengannya mereka diidentifikasi oleh parser SQL:
Selain itu:
Selain itu, untuk dapat menggunakan tanda kutip dalam literal string:
Karena semua urutan yang disebutkan terakhir ini khusus untuk string literal, maka perlu bahwa data apa pun, yang dimaksudkan untuk ditafsirkan sebagai string literal, diproses dengan benar agar sesuai dengan aturan ini. Ini berarti khususnya:jika salah satu karakter yang disebutkan dimaksudkan untuk digunakan dalam literal string, karakter tersebut harus ditulis sebagai salah satu cara yang disebutkan.
Jadi jika Anda melihatnya dari sini, ini bahkan bukan masalah keamanan tetapi hanya memproses data sehingga ditafsirkan sebagaimana dimaksud .
Hal yang sama berlaku untuk literal lain serta aspek SQL lainnya.
Jadi bagaimana dengan pertanyaan Anda?
Ya, itu akan aman dari injeksi SQL. bin2hex
mengembalikan string yang hanya berisi karakter heksadesimal. Dan tak satu pun dari karakter ini memerlukan perlakuan khusus saat menggunakannya dalam literal string MySQL.
Tapi serius, mengapa ada orang yang ingin menggunakan teknik pemformatan yang rumit ini ketika ada perpustakaan dan kerangka kerja yang menyediakan teknik yang nyaman seperti pernyataan yang diparameterisasi/disiapkan?