Melepaskan Aksara Khas dalam Suntikan SQL
Untuk mengelakkan suntikan SQL, adalah penting untuk melarikan diri daripada aksara tertentu yang boleh memanipulasi pelaksanaan pertanyaan. Menurut fungsi mysql_real_escape_string() MySQL API, aksara ini harus dilepaskan:
<pre class="brush:php;toolbar:false">0x00 : "\0", 0x08 : "\b", 0x09 : "\t", 0x0a : "\n", 0x0d : "\r", 0x1a : "\Z", 0x22 : '\"', 0x25 : "\%", 0x27 : "\'", 0x5c : "\\", 0x5f : "\_",
Walau bagaimanapun, perpustakaan keselamatan ESAPI OWASP.org untuk Python melangkaui aksara ini, termasuk yang berikut dalam mekanisme pengekodannya:
SELECT a FROM b WHERE c = '...user input ...';
Walaupun boleh difahami mengapa aksara meta seperti '%' dan '_' harus dilepaskan, kemasukan aksara backspace ('b') dan tabulator ('t') menimbulkan persoalan.
Kebimbangan Keselamatan dengan Penjadual dan Aksara Ruang Belakang
Aksara Penjadual ('t')
Karakter penjadual (kod ASCII 9) menggerakkan kursor ke hentian tab seterusnya, ditakrifkan untuk sistem tertentu. Dalam pertanyaan SQL, penjadual boleh digunakan untuk memasukkan ruang kosong atau menjajarkan data. Bergantung pada tetapan hentian tab, penyerang berkemungkinan mengubah suai pertanyaan atau menyuntik ruang kosong, yang membawa kepada tingkah laku yang tidak diingini.
Watak Ruang Belakang ('b')
Ruang belakang aksara (kod ASCII 8) menggerakkan kursor satu aksara ke belakang, dengan berkesan menimpanya. Dalam pertanyaan SQL, ruang belakang boleh digunakan untuk memadam data yang dimasukkan sebelum ini, yang berpotensi membawa kepada suntikan atau manipulasi data.
Contoh: Eksploitasi Aksara Backspace
Pertimbangkan perkara berikut pertanyaan:
Bobby]dor[p TA[ble[s
Jika pengguna berniat jahat memasukkan nilai yang mengandungi aksara backspace, mereka berpotensi memadamkan sebahagian daripada pertanyaan, mengakibatkan tingkah laku yang tidak diingini. Sebagai contoh, memasukkan input ini:
SELECT a FROM b WHERE c = 'Bobby';
Selepas ruang belakang memadamkan aksara "[dor[p TA[ble[s", pertanyaan secara berkesan menjadi:
Ini berniat jahat input berkemungkinan mengembalikan semua baris dengan c sama dengan 'Bobby,' yang berpotensi menjejaskan maklumat sensitif.
Kesimpulan
Walaupun melarikan diri daripada aksara penjadual dan ruang belakang mungkin tidak biasa diperlukan, ia boleh menjadi berharga dalam senario tertentu untuk menghalang suntikan SQL. Dengan melarikan diri daripada aksara ini, pembangun boleh memastikan bahawa pengguna berniat jahat tidak dapat mengeksploitasi potensi kelemahan untuk mengganggu atau menjejaskan pertanyaan SQL.
Atas ialah kandungan terperinci Patutkah Aksara Backspace dan Tab Dilepaskan dalam Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!