Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Melarikan Diri Kad Liar MySQL untuk Pertanyaan SQL Selamat?

Bagaimana untuk Melarikan Diri Kad Liar MySQL untuk Pertanyaan SQL Selamat?

Barbara Streisand
Barbara Streisandasal
2024-11-09 10:03:02218semak imbas

How to Escape MySQL Wildcards for Secure SQL Queries?

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:

  1. Meloloskan diri SUKA:
  2. Potensi untuk melarikan diri segaris ke belakang boleh menjadi masalah, terutamanya jika anda menggunakan literal rentetan PHP, seperti yang ditunjukkan dalam contoh.Untuk mengelakkan kerumitan ini dan memastikan kemudahalihan, pertimbangkan untuk mengatasi kelakuan lalai (salah) LIKE melarikan diri dan nyatakan watak melarikan diri tersuai menggunakan LIKE ... ESCAPE ... binaan:

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn