評估mysql_real_escape_string() 針對亞洲編碼SQL 注入的安全性
問題:
已報告一個安全漏洞,聲稱可以使用特定的亞洲字元編碼(例如BIG5或 GBK)繞過 mysql_real_escape_string()。這個漏洞是否有效?如果有效,我們如何在不使用準備好的語句的情況下緩解它?
答案:
根據 PHP 開發人員 Stefan Esser 的說法,mysql_real_escape_string( ) 當某些編碼設定被設定時,不能完全安全地防止 SQL注入
說明:
使用 SET NAMES 指令變更資料庫字元編碼時會出現此問題。編碼中的這種變更會影響特殊字元(例如反斜線 ())的轉義方式。 mysql_real_escape_string() 採用預設編碼,並且不會相應地調整其轉義邏輯。
因此,如果攻擊者使用允許反斜線作為後續位元組的編碼,mysql_real_escape_string() 可能無法正確轉義這些字元。這可能會導致成功的 SQL 注入攻擊。
緩解措施:
要在預備語句不可用時解決此漏洞:
以上是mysql_real_escape_string() 是否容易受到亞洲編碼的 SQL 注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!