Rumah > Artikel > pembangunan bahagian belakang > Adakah `mysql_real_escape_string()` Benar-benar Berkesan Melawan SQL Injection?
Adakah mysql_real_escape_string() Rosak? Analisis Yang Lebih Dalam
Walaupun penggunaannya meluas, beberapa kebimbangan telah dibangkitkan mengenai keberkesanan mysql_real_escape_string() dalam mencegah serangan suntikan SQL. Artikel ini menyiasat tuntutan ini dan meneroka had dan alternatif kepada fungsi ini.
Kecacatan dalam mysql_real_escape_string()
Kebimbangan tentang mysql_real_escape_string() berpunca daripada pergantungannya pada arus set aksara sambungan MySQL. Kebergantungan ini boleh membawa kepada kelemahan jika set aksara tidak dikonfigurasikan dengan betul atau jika ia ditukar semasa pelaksanaan pertanyaan.
Dokumentasi MySQL secara eksplisit menyatakan bahawa set aksara yang digunakan oleh mysql_real_escape_string() dikawal oleh mysql_set(_character_set ). Menetapkan set aksara dengan pernyataan SET NAMES atau SET CHARACTER SET tidak menjejaskan set aksara yang digunakan oleh mysql_real_escape_string().
Kod Bukti
Kod berikut menunjukkan kerentanan :
mysql_set_charset('latin1'); $escaped_string = mysql_real_escape_string("'@CHARACTER SET utf8");
Dalam contoh ini, mysql_set_charset() menetapkan set aksara sambungan kepada 'latin1'. Walau bagaimanapun, fungsi mysql_real_escape_string() masih terlepas daripada rentetan seolah-olah set aksara ialah 'utf8'.
Alternatif kepada mysql_real_escape_string()
Berdasarkan batasan ini, adalah dinasihatkan untuk mengelak daripada bergantung semata-mata mysql_real_escape_string() untuk perlindungan suntikan SQL. Sebaliknya, pertimbangkan untuk menggunakan alternatif berikut:
Kesimpulan
Walaupun mysql_real_escape_string() kekal sebagai kaedah yang sah untuk melepaskan rentetan, adalah penting untuk mengetahui batasannya dan menggunakan keselamatan tambahan langkah-langkah untuk mencegah serangan suntikan SQL. Dengan memahami dan mengurangkan kelemahan ini, pembangun boleh melindungi aplikasi MySQL mereka dengan berkesan daripada input berniat jahat.
Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` Benar-benar Berkesan Melawan SQL Injection?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!