上周的時候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 //Vevb.com
大家如果有用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下載包.
新聞熱點
疑難解答