Rumah > Artikel > pangkalan data > Adakah mysql_real_escape_string() Terdedah kepada SQL Injection dengan Pengekodan Asia?
Menilai Keselamatan mysql_real_escape_string() terhadap SQL Injection dengan Asian Encodings
Soalan:
Kerentanan keselamatan telah dilaporkan mendakwa bahawa mysql_real_escape_string() boleh dipintas menggunakan pengekodan aksara Asia tertentu, seperti BIG5 atau GBK. Adakah kelemahan ini sah, dan jika ya, bagaimanakah kita boleh mengurangkannya tanpa menggunakan pernyataan yang disediakan?
Jawapan:
Menurut Stefan Esser, pembangun PHP, mysql_real_escape_string( ) tidak selamat sepenuhnya terhadap suntikan SQL apabila tetapan pengekodan tertentu digunakan.
Penjelasan:
Isu timbul apabila arahan SET NAMES digunakan untuk mengubah pengekodan aksara pangkalan data. Perubahan dalam pengekodan ini mempengaruhi cara aksara khas, seperti garis miring ke belakang (), dilarikan. Mysql_real_escape_string() menganggap pengekodan lalai dan tidak melaraskan logik melarikan diri dengan sewajarnya.
Oleh itu, jika penyerang menggunakan pengekodan yang membenarkan garis miring ke belakang sebagai bait berikutnya, mysql_real_escape_string() mungkin tidak melarikan diri dengan betul daripada aksara ini. Ini boleh membawa kepada serangan suntikan SQL yang berjaya.
Mitigasi:
Untuk menyelesaikan kelemahan ini apabila pernyataan yang disediakan tidak tersedia:
Atas ialah kandungan terperinci Adakah mysql_real_escape_string() Terdedah kepada SQL Injection dengan Pengekodan Asia?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!