PHP 廣泛用於 Web 開發,代碼審計已成安全必要環節。傳統靜態分析依賴危險函數字典(grep 關鍵字),但大型專案常被掃描多輪,明顯漏洞已修補。本文分享非傳統技巧以發掘新漏洞類型。
foreach($_GET as $k=>$v) echo $k; 若直接輸出 $k 導致 XSS。鍵名同屬使用者輸入,須納入審計範圍。
foreach($_GET as $k=>$v) $$k=$v; (Discuz、DedeCMS 早期通用)parse_str($_SERVER['QUERY_STRING']) 可覆蓋任意變數,甚至陣列鍵名注入 = 字元。import_request_variables('GPC') 可汙染 $_SERVER 等超全域陣列。$_SERVER、getenv()、php://input、SQL IN/ORDER BY 子句。substr 截斷產生單引號/反斜線逃逸。base64, urlencode, iconv, unserialize) 可隱藏 Payload 繞過 WAF。危險函數:eval, preg_replace/e, assert, call_user_func*, create_function, 變數函數。雙引號內變數解析特性 ("$var") 亦可導致注入。
Month of PHP Bugs 類歷史漏洞 (如 unserialize)。PHPSESSID=../evil.php 刪除任意檔。rand() 最大 32767 (Windows),極易暴力破解。mt_rand() 種子空間 2^32,若種子可知 (如 mt_srand(microtime()*1e6)) 可逆向推導後續隨機數。%00 截斷 include 後綴;? 偽截斷;超長路徑截斷 (Win 260, *nix 4096)。sql_mode 非嚴格模式下長字串截斷導致重複帳號註冊。0xC1) 導致資料截斷繞過唯一性檢查。<>Pp 等特殊字元可繞過副檔名檢查。