文章分析了關於PHP5.2.X防止Hash沖突拒絕服務攻擊的Patch方法,有需要了朋友可參考一下。
上周的時候Dmitry突然在5.4發布在即的時候, 引入了一個新的配置項:
Added max_input_vars directive to prevent attacks based on hash collision這個預防的攻擊, 就是”通過調用Hash沖突實現各種語言的拒絕服務攻擊漏洞”(multiple implementations denial-of-service via hash algorithm collision).
攻擊的原理很簡單, 目前很多語言, 使用hash來存儲k-v數據, 包括常用的來自用戶的POST數據, 攻擊者可以通過構造請求頭, 並伴隨POST大量的特殊的”k”值(根據每個語言的Hash算法不同而定制), 使得語言底層保存POST數據的Hash表因為”沖突”(碰撞)而退化成鏈表.
這樣一來, 如果數據量足夠大, 那麼就可以使得語言在計算, 查找, 插入的時候, 造成大量的CPU占用, 從而實現拒絕服務攻擊.
PHP5.4是通過增加一個限制來盡量避免被此類攻擊影響:
- max_input_vars - specifies how many GET/POST/COOKIE input variables may be accepted. default value 1000
大家如果有用5.2的, 如果被此類攻擊威脅, 可以打上下面的patch, PHP5.3的, 可以考慮升級到5.3.9, 已經包含了此patch(因為5.3.9目前是RC狀態, 所以如果不願意升級, 也可以參照這個patch自己為5.3寫一個):
防止辦法
1. Cd into the PHP src run: patch -p1 < php-5.2.*-max-input-vars.patch
2. Since the latest PHP 5.3.9-RC4 has fixed this issue, so for 5.3 you can upgrade to 5.3.9RC4
Of course if you don't want to upgrade to a RC version, you can simply tweak this patch into a 5.3 suitable patch.
大家可到https://github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-vars下載包