Adakah mysql_real_escape_string() Melindungi Sepenuhnya Terhadap SQL Injection?
Tuntutan baru-baru ini diedarkan bahawa mysql_real_escape_string() boleh dipintas dengan beberapa aksara Asia , khususnya Big5 dan GBK. Adakah pernyataan ini sah, dan jika ya, bagaimanakah anda boleh melindungi tapak web anda tanpa menggunakan pernyataan yang disediakan?
Kerentanan
Menurut Stefan Esser, mysql_real_escape_string() memberikan kelemahan apabila arahan SET NAMES digunakan. Perintah ini mengubah pengekodan aksara, menjadikan mysql_real_escape_string() tidak menyedari pengekodan berbilang bait tertentu yang menggunakan garis miring ke belakang sebagai bait tambahan. Melarikan diri yang salah ini boleh menjejaskan keselamatan tapak web anda.
Perlindungan
Walaupun pengekodan UTF-8 tidak terdedah kepada eksploitasi ini, adalah penting untuk menggunakan mysql_set_charset untuk mengubah pengekodan dengan selamat . Fungsi ini, bagaimanapun, hanya tersedia dalam versi PHP yang lebih baharu. Jika anda tidak boleh menggunakan penyata yang disediakan atau mysql_set_charset, anda mungkin perlu meneroka kaedah alternatif untuk melindungi tapak web anda daripada serangan suntikan SQL.
Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` Benar-benar Selamat: Bolehkah Pengekodan Aksara Asia Melangkaui Perlindungannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!