Suntikan MySQL dan Melarikan Diri Aksara
Semasa menggunakan fungsi mysql_real_escape_string() daripada MySQL API, adalah penting untuk memastikan semua aksara yang terdedah melarikan diri untuk menghalang suntikan SQL. Dokumentasi MySQL menentukan bahawa aksara berikut memerlukan melarikan diri:
<pre class="brush:php;toolbar:false">0x00 : "\0", 0x08 : "\b", 0x09 : "\t", 0x1a : "\Z", 0x22 : '\"', 0x25 : "\%", 0x27 : "\'", 0x5c : "\\", 0x5f : "\_",
Walau bagaimanapun, membandingkan senarai ini dengan port Python ESAPI, aksara tambahan dikenal pasti untuk melarikan diri, termasuk:
SELECT a FROM b WHERE c = '...user input ...';
Kebimbangan timbul mengenai keperluan untuk melepaskan aksara ruang belakang (b) dan penjadual (t).
Menangani Pertanyaan
"\bDELETE_MY_DATABASE"
Apabila input pengguna mengandungi penjadual atau ruang belakang watak, ia boleh menimbulkan risiko keselamatan. Pertimbangkan senario di mana pelakon berniat jahat menyertakan perkara berikut pada akhir input pengguna:
Apabila dihantar ke pangkalan data, aksara ruang belakang akan memadamkan petikan tunggal sebelumnya, yang membawa kepada pelaksanaan PADAM yang berniat jahat pertanyaan.
Perpustakaan Keselamatan ESAPI
Perpustakaan keselamatan ESAPI menggabungkan aksara ruang belakang dan penjadual untuk melarikan diri disebabkan masalah keselamatan yang berpotensi:
Kesimpulan
Oleh itu, adalah disyorkan untuk berhati-hati dan melarikan diri daripada semua aksara yang dinyatakan dalam pustaka keselamatan ESAPI apabila berurusan dengan input pengguna dalam pertanyaan MySQL. Walaupun watak-watak tertentu seperti backspace dan tabulator mungkin kelihatan tidak berbahaya, kesannya bersama-sama dengan mekanisme lain boleh menimbulkan ancaman keselamatan yang ketara.
Atas ialah kandungan terperinci Mengapa Watak Backspace dan Tab Perlu Dilepaskan dalam Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!