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

PHP 程式碼審計實例:ecshop 支付漏洞中的 addslashes 繞過

     編輯:PHP 綜合知識

漏洞代碼片段

<?php
$a = addslashes($_GET['a']);
$b = addslashes($_GET['b']);
print_r($a . '<br>');
print_r($b . '<br>');
print_r(str_replace($a, '', $b));
// seay
?>

攻擊原理

  1. 攻擊者傳入 a=\(反斜線),經 addslashes() 轉義變為 \\(兩個反斜線)。
  2. 傳入 b='(單引號),經 addslashes() 變為 \'(反斜線+單引號)。
  3. str_replace($a, '', $b) 將 \\ 替換為空字串,導致 \' 中的反斜線被移除,殘留單引號 ' 逸出 SQL 語法。
  4. 最終 SQL 變為 ... WHERE x = '' 形成注入。

關鍵點

  • addslashes() 僅轉義單引號、雙引號、反斜線、NULL,不處理字元編碼問題。
  • str_replace 以字串方式替換,破壞了轉義結構。
  • 雙重轉義與替換操作組合,導致防禦失效。

修補建議

  1. 棄用 addslashes(),改用 PDO 預處理語句 或 mysqli_real_escape_string()(需設定正確字元集)。
  2. 避免對已轉義資料再做字串替換、拼接。
  3. 統一在資料庫驅動層處理轉義,應用層勿自行處理。
  4. 啟用 WAF、資料庫權限最小化、錯誤訊息不外露。

參考來源

MoonSec 團隊分析:https://www.moonsec.com/

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