mysql_real_escape_string() 是抵禦 SQL 注入的堅不可摧的盾牌嗎?
justinshattuck.com 上的一個部分錶明 mysql_real_escape_string() 在某些情況下容易出錯亞洲字元編碼。具體來說,它聲稱編碼繞過 mysql_real_escape_string() 使用 BIG5 或 GBK 將危險字元偷運到查詢中。
這個漏洞是真的嗎?
根據 Stefan Esser,答案是令人不安的「是」。他聲稱當使用 SET NAMES 時 mysql_real_escape_string() 會出現問題。此方法切換編碼以滿足應用程式的需要,而無需通知 mysql_real_escape_string()。因此,如果多位元組編碼允許反斜線作為第二個、第三個或第四個位元組,則會出現問題。 Mysql_real_escape_string() 仍然沒有註意到這種不規則性,並且無法正確轉義字元。
保護您的網站
Esser 建議 UTF-8 仍然是安全的編碼,但 UTF -8 並不總是選項。不幸的是,更安全的替代方案 mysql_set_charset 僅在最近的 PHP 版本中可用。
以上是`mysql_real_escape_string()` 是針對所有字元編碼中的 SQL 注入的可靠防禦嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!