Adakah `mysql_real_escape_string` Benar-benar Selamat? Memeriksa Had Fungsi.

Patricia Arquette
Lepaskan: 2024-10-27 04:38:30
asal
439 orang telah melayarinya

 Is `mysql_real_escape_string` Really Safe? Examining the Function's Limitations.

Kerentanan dalam Penggunaan mysql_real_escape_string

Walaupun ramai telah membangkitkan kebimbangan mengenai potensi risiko menggunakan mysql_real_escape_string untuk melindungi daripada serangan suntikan SQL, sedikit memberikan contoh konkrit yang menggambarkan batasannya. Untuk menangani perkara ini, mari kita selidiki kelemahan utama fungsi ini.

Penggunaan Salah

Satu perangkap biasa dalam menggunakan mysql_real_escape_string ialah salah pengendalian nilai berangka. Pertimbangkan kod berikut:

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Salin selepas log masuk

Di sini, input '5 OR 1=1' akan mengelak daripada perlindungan kerana mysql_real_escape_string direka untuk pembersihan rentetan, bukan nilai angka.

Konteks -Had Khusus

Satu lagi had mysql_real_escape_string terletak pada konteks penggunaan khususnya. Ia bertujuan untuk melepaskan nilai dalam rentetan yang disebut dalam pernyataan SQL, bukan untuk konteks lain seperti nilai yang tidak disebut atau secara langsung dalam sintaks SQL.

Sebagai contoh, kod berikut akan terdedah:

mysql_query("... `foo` = $value ...");
Salin selepas log masuk

Seperti yang dibincangkan di atas, mysql_real_escape_string tidak akan digunakan dengan betul dalam senario ini.

Isu Pengekodan

Selain itu, tetapan pengekodan sambungan pangkalan data yang salah boleh membawa kepada kerentanan. Jika pengekodan sambungan ditetapkan menggunakan mysql_query("SET NAMES 'utf8'"), dan bukannya mysql_set_charset('utf8'), mysql_real_escape_string akan menganggap pengekodan aksara yang salah dan rentetan melarikan diri secara tidak sesuai. Ini boleh memudahkan serangan suntikan yang melibatkan rentetan berbilangbait.

Kesimpulan

Walaupun mysql_real_escape_string tidak mempunyai kelemahan yang wujud apabila digunakan dengan betul, kebimbangan utama terletak pada kecenderungannya terhadap penggunaan yang salah. Had yang dibincangkan di atas menggambarkan cabaran dalam menggunakan fungsi ini dengan berkesan, menjadikannya penting untuk mempertimbangkan pendekatan alternatif seperti pernyataan yang disediakan atau pertanyaan berparameter untuk memastikan perlindungan yang teguh terhadap serangan suntikan SQL.

Atas ialah kandungan terperinci Adakah `mysql_real_escape_string` Benar-benar Selamat? Memeriksa Had Fungsi.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan