上週 Dmitry 在 PHP 5.4 即將釋出前夕,引入新設定項 max_input_vars:
Added max_input_vars directive to prevent attacks based on hash collision
此舉針對「透過 Hash 演算法碰撞實現多種語言拒絕服務攻擊漏洞」。攻擊原理簡單:多種語言使用 Hash 表儲存鍵值資料(含使用者 POST 資料),攻擊者依語言 Hash 演算法構造大量特製「鍵」值,導致底層 Hash 表因碰撞退化為鏈表,使插入、查找、計算產生大量 CPU 佔用,實現 DoS。
PHP 5.4 透過限制輸入變數數量緩解攻擊:
max_input_vars - specifies how many GET/POST/COOKIE input variables may be accepted. default value 1000
若仍使用 PHP 5.2 且面臨攻擊威脅,可套用以下 Patch:
patch -p1 < php-5.2.*-max-input-vars.patch可從 GitHub 專案頁面 下載 Patch 檔案。
此 Patch 實作與 PHP 5.4 內建的 max_input_vars 邏輯一致,透過在輸入解析階段計數並限制變數總數,從根源阻斷 Hash 碰撞攻擊的放大效應。建議所有無法升級至 PHP 5.4+ 的舊版部署環境儘快套用。