首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP urldecode 導致 SQL 注入漏洞分析:Discuz! X1.5 實戰案例

     編輯:PHP 綜合知識

漏洞背景

Discuz! X1.5 因濫用 urldecode() 導致盲目 SQL 注入。PHP 手冊明確警告:$_GET、$_REQUEST 已自動解碼,對其元素再次使用 urldecode() 會產生危險結果。

漏洞原理

  1. 攻擊者將單引號 ' 進行雙重 URL 編碼:%2527。
  2. POST 提交,PHP 內部生成 $_POST 時自動解碼一次,變為 %27。
  3. 此時 %27 非單引號,magic_quotes_gpc 不會轉義。
  4. 若代碼再呼叫 urldecode(),%27 還原為單引號 ',導致 SQL 注入。

Discuz 易受攻擊代碼

foreach($_POST as $k => $v) {
    $value = urldecode($v);  // 畫蛇添足
    $this->setParameter($k, $value);
}

防範總結

  1. 選擇優質技術書籍,避免誤人子弟的錯誤教材。
  2. 慎用 urldecode(),理解 PHP 自動解碼機制。
  3. 重視 PHP 手冊中的安全警告。

原文來源:https://demon.tw/programming/php-urldecode-sql-injection.html

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved