Dalam bidang pembangunan perisian, mencegah serangan suntikan SQL adalah penting. Walaupun pertanyaan SQL berparameter ialah kaedah terbaik untuk pembersihan input, sesetengah pembangun masih mengambil jalan keluar dari petikan tunggal dan membungkus input pengguna dalam petikan tunggal sebagai mekanisme pertahanan alternatif.
Teknik melarikan diri yang cacat
Kaedah ini terdiri daripada menggantikan mana-mana petikan tunggal dalam input pengguna dengan petikan tunggal berganda dan melampirkan keseluruhan rentetan dalam petikan tunggal:
<code>sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"</code>
Idea di sebalik teknik ini ialah mana-mana petikan tunggal yang dimasukkan oleh pengguna dinetralkan dengan berkesan, menghalang penamatan rentetan. Oleh itu, sebarang aksara lain, seperti koma bertitik atau tanda peratus, menjadi sebahagian daripada rentetan dan tidak dilaksanakan sebagai arahan.
Kerentanan suntikan
Walau bagaimanapun, teknik ini tidak dapat mengendalikan situasi di mana input pengguna itu sendiri mungkin mengandungi petikan tunggal berganda. Dalam kes ini, rentetan ditamatkan dan baki input boleh dilaksanakan sebagai arahan SQL.
Contoh input
Untuk menggambarkan ini, pertimbangkan input pengguna berikut:
<code>'SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
Selepas pelaksanaan, kod akan menjadi:
<code>SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
Input ini berjaya menyuntik klausa OR ke dalam pertanyaan SQL, memintas sanitasi yang dimaksudkan.
Pertimbangan lanjut
Adalah penting untuk ambil perhatian bahawa teknik melarikan diri ini mempunyai kelemahan lain, termasuk:
Amalan Terbaik
Jangan bergantung pada teknik sanitasi input ad-hoc, ikuti amalan terbaik ini untuk mencegah suntikan SQL:
Atas ialah kandungan terperinci Adakah Melarikan Diri Sebut Harga Satu Pertahanan yang Boleh Dipercayai Terhadap Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!