Rumah >pangkalan data >tutorial mysql >Adakah mysql_real_escape_string Benar-benar Berkesan Melawan Suntikan SQL, dan Apakah Hadnya?

Adakah mysql_real_escape_string Benar-benar Berkesan Melawan Suntikan SQL, dan Apakah Hadnya?

Barbara Streisand
Barbara Streisandasal
2024-11-29 00:19:10544semak imbas

Is mysql_real_escape_string Truly Effective Against SQL Injection, and What Are Its Limitations?

mysql_real_escape_string: Potensi Perangkap

Fungsi mysql_real_escape_string, bertujuan untuk melindungi daripada serangan suntikan SQL, telah diteliti untuk hadnya. Walaupun ia boleh meningkatkan keselamatan, kelemahan tertentu menghalang keberkesanannya.

Penggunaan Salah dan Nilai Angka

Satu isu utama ialah penggunaan mysql_real_escape_string yang salah. Ia direka bentuk semata-mata untuk melepaskan nilai rentetan dalam pertanyaan SQL. Walau bagaimanapun, jika digunakan pada nilai berangka, seperti dalam contoh:

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));

ia gagal menghalang serangan seperti:

5 OR 1=1

Sisipan Rentetan Tidak Dipetik

Satu lagi kelemahan timbul apabila mysql_real_escape_string digunakan dalam perkara berikut senario:

$sql = "... `foo` = $value ...";

Di sini, input dimasukkan tanpa melarikan diri dan petikan yang betul, membenarkan serangan suntikan SQL. Begitu juga, jika digunakan pada pembolehubah, seperti:

$sql = "... `$value` ...";

kelemahan berterusan.

Konflik Pengekodan Sambungan Pangkalan Data

Selain itu, ketidakkonsistenan antara pengekodan ditetapkan dalam mysql_ API dan pangkalan data boleh mencipta kelemahan. Menetapkan pengekodan pangkalan data menggunakan kaedah yang salah, seperti:

mysql_query("SET NAMES 'utf8'", $link);

boleh menyebabkan ketidakpadanan dalam rentetan melarikan diri, yang membawa kepada kemungkinan serangan suntikan.

Kesimpulan

Walaupun mysql_real_escape_string boleh memberikan sedikit perlindungan terhadap serangan suntikan SQL, kes penggunaannya yang sempit dan kerentanan terhadap aplikasi yang salah menjadikannya pilihan yang kurang diingini. Untuk keselamatan yang lebih teguh, pembangun digalakkan untuk meneroka kaedah alternatif, seperti pernyataan yang disediakan, yang menawarkan perlindungan yang lebih besar terhadap kelemahan.

Atas ialah kandungan terperinci Adakah mysql_real_escape_string Benar-benar Berkesan Melawan Suntikan SQL, dan Apakah Hadnya?. 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