Melepaskan Kad Liar MySQL: Panduan Komprehensif
Apabila berurusan dengan input pengguna yang tidak boleh dipercayai dalam persekitaran MySQL, adalah penting untuk melepaskan aksara khas untuk mencegah serangan suntikan SQL. Fungsi PHP mysql_real_escape_string biasanya digunakan untuk tujuan ini. Walau bagaimanapun, ia tidak terlepas daripada kad bebas MySQL "%" dan "_".
Untuk menangani isu ini, sesetengah pengguna menggunakan addcslashes untuk melarikan diri secara manual daripada kad bebas ini. Walau bagaimanapun, pendekatan ini boleh membawa kepada hasil yang tidak dijangka, seperti yang dilihat dalam contoh yang disediakan:
Input: test_test " ' Database: test\_test " '
Di sini, garis bawah ("_") terlepas dengan garis serong ke belakang sebelumnya, tidak seperti petikan tunggal ("'" ) dan petikan berganda ("""). Tingkah laku ini boleh mengelirukan kerana semua aksara ini dilarikan menggunakan aksara sengkang terbalik.
Memahami fenomena ini memerlukan mendalami mekanisme melarikan diri kad bebas MySQL. "_" dan "% " tidak dianggap sebagai kad bebas dalam penggunaan MySQL umum dan tidak boleh dilepaskan apabila membina literal rentetan biasa. mysql_real_escape_string dengan betul mengendalikan situasi ini.
Walau bagaimanapun, "%_" menjadi aksara khas hanya dalam konteks padanan LIKE . Untuk menyediakan rentetan untuk penggunaan literal dalam pernyataan SUKA, anda mesti melakukan pelarian SUKA walaupun menggunakan pertanyaan berparameter.
Meloloskan diri SUKA melibatkan dua tahap:
Kemudian , gunakannya seperti berikut:
Dengan mengikut pengesyoran ini, anda boleh melepaskan kad liar MySQL dengan berkesan dan meningkatkan keselamatan aplikasi pangkalan data anda.// function that performs LIKE escaping function like($s, $e) { return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s); }
Atas ialah kandungan terperinci Bagaimana untuk Melarikan Diri Kad Liar MySQL untuk Pertanyaan SQL Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!