mysql_real_escape_string() 是否容易受到亞洲編碼的 SQL 注入?

Mary-Kate Olsen
發布: 2024-11-27 22:54:10
原創
714 人瀏覽過

Is mysql_real_escape_string() Vulnerable to SQL Injection with Asian Encodings?

評估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 注入攻擊。

緩解措施:

要在預備語句不可用時解決此漏洞:

  1. 使用mysql_set_charset() 函數顯式設定字元編碼,而不是依賴SET NAMES。這可確保 mysql_real_escape_string() 使用正確的編碼資訊進行操作。
  2. 切換到安全編碼,例如 UTF-8,它以防止在 SQL 注入中誤用反斜線的方式處理反斜線。

以上是mysql_real_escape_string() 是否容易受到亞洲編碼的 SQL 注入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板