Walaupun mysql_real_escape_string menyediakan satu bentuk penapisan data input untuk menghalang serangan suntikan SQL, batasannya memerlukan perhatian.
Menggabungkan Pertanyaan:
Seperti yang dinyatakan, menggabungkan pertanyaan menggunakan mysql_real_escape_string tidak melindungi sepenuhnya daripada suntikan SQL. Pertimbangkan contoh berikut:
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Input seperti "5 OR 1=1" boleh memintas perlindungan yang disediakan oleh mysql_real_escape_string kerana penggunaan yang salah, menganggap nilai berangka sebagai rentetan.
Skop Sempit:
mysql_real_escape_string direka khusus untuk mengubah suai nilai rentetan yang bertujuan untuk dimasukkan dalam rentetan yang dipetik dalam penyataan SQL.
$value = mysql_real_escape_string($value, $link); $sql = "... `foo` = '$value' ...";
Jika digunakan di luar konteks sempit ini, mysql_real_escapetently_string mungkin hilang cipta ralat sintaks atau kelemahan XSS.
Percanggahan Charset:
Menetapkan pengekodan sambungan pangkalan data secara tidak betul boleh memperkenalkan kelemahan. Menggunakan mysql_query("SET NAMES 'utf8'", $link) untuk menetapkan pengekodan aksara boleh membawa kepada percanggahan antara cara mysql_ API mengendalikan rentetan dan cara pangkalan data mentafsirnya.
Pelaksanaan Salah:
mysql_real_escape_string terdedah kepada penggunaan yang salah, seperti:
Walaupun mysql_real_escape_string boleh memberikan perlindungan terhadap serangan suntikan apabila digunakan dengan betul, adalah disyorkan untuk menggunakan teknik yang lebih mantap, seperti pernyataan yang disediakan, untuk memastikan keselamatan yang menyeluruh.
Atas ialah kandungan terperinci Adakah `mysql_real_escape_string` adalah Pertahanan yang Boleh Dipercayai Terhadap Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!