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

PHP 泛安全防禦:SQL 注入、XSS、Safe Mode 繞過與 XML/CDATA 風險

     編輯:PHP 綜合知識

SQL 注入現狀

magic_quotes_gpc = On 及普遍使用 addslashes()/mysql_real_escape_string() 使傳統注入較難,但仍需警惕:

  • 未過濾的整型參數:id=1 OR 1=1
  • 二次注入:資料存入時逃脫,取出用於新查詢時觸發。
  • 編碼繞過:多位元組字符集(GBK)吃掉反斜線。

最佳防禦:預處理語句(Prepared Statements),參數化查詢徹底分離代碼與資料。

XSS 防禦

  • 輸出編碼:htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。
  • HTML 輸入需白名單過濾(HTMLPurifier)。
  • HTTP Only Cookie、CSP 標頭加強防禦。

XML/CDATA 與 AJAX Hacking

RSS 輸出範例:

<description><![CDATA[{$msginfo}]]></description>

若 $msginfo 含 ]]><script>alert(1)</script>,CDATA 結束標記被提前閉合,腳本注入執行。過濾僅針對 ]]> 不足,<title> 等欄位同樣危險。

對策:所有 XML 文字節點必須實體化(<→&lt; 等),或使用 DOMDocument 建立 XML 確保正確跳脫。

Safe Mode 與 open_basedir 繞過

PHP 底層漏洞可能繞過限制。範例:

error_log("<? phpinfo();?>", 3, "test.php"); // 正常寫入
error_log("<? phpinfo();?>", 3, "prefix://../../test.php"); // 利用流封裝協議繞過

對策:

  • 升級 PHP 至最新修補版本。
  • 停用危險函數:disable_functions = error_log, exec, system, passthru, shell_exec, proc_open, popen。
  • 使用容器/虛擬化隔離,而非依賴 Safe Mode(PHP 5.4 已移除)。

安全開發心法

  1. 所有用戶輸入視為不信任:類型、長度、格式、編碼全驗證。
  2. 最小權限原則:資料庫帳號、檔案系統、系統指令。
  3. 深度防禦:輸入過濾 + 輸出編碼 + 參數化查詢 + WAF + 日誌審計。
  4. 持續更新:PHP、擴展、框架、資料庫、作業系統安全補丁。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved