php 防ddos,php防止ddos,dns,集群攻击的实现代码

/* vim: set expandtab tabstop=4 shiftwidth=4: */

// +----------------------------------------------------------------------+

// | PHP version 5 |

// +----------------------------------------------------------------------+

// | Copyright (c) 1997-2004 The PHP Group |

// +----------------------------------------------------------------------+

// | This source file is subject to version 3.0 of the PHP license, |

// | that is bundled with this package in the file LICENSE, and is |

// | available through the world-wide-web at the following url: |

// | http://www.php.net/license/3_0.txt. |

// | If you did not receive a copy of the PHP license and are unable to |

// | obtain it through the world-wide-web, please send a note to |

// | license@php.net so we can mail you a copy immediately. |

// +----------------------------------------------------------------------+

// | Authors: Original Author |

// | Your Name |

// +----------------------------------------------------------------------+

//

// $Id:$

/**

* 防止ddos、dns、集群等攻击

*/

//查询禁止IP

$ip = $_SERVER['REMOTE_ADDR'];

$fileht = ".htaccess2";

if (!file_exists($fileht)) file_put_contents($fileht, "");

$filehtarr = @file($fileht);

if (in_array($ip . "

", $filehtarr)) die("Warning:" . "
" . "Your IP address are forbided by some reason, IF you have any question Pls emill to shop@jbxue.com!");

//加入禁止IP

$time = time();

$fileforbid = "log/forbidchk.dat";

if (file_exists($fileforbid)) {

if ($time - filemtime($fileforbid) > 60) unlink($fileforbid);

else {

$fileforbidarr = @file($fileforbid);

if ($ip == substr($fileforbidarr[0], 0, strlen($ip))) {

if ($time - substr($fileforbidarr[1], 0, strlen($time)) > 600) unlink($fileforbid);

elseif ($fileforbidarr[2] > 600) {

file_put_contents($fileht, $ip . "

", FILE_APPEND);

unlink($fileforbid);

} else {

$fileforbidarr[2]++;

file_put_contents($fileforbid, $fileforbidarr);

}

}

}

}

//防刷新

$str = "";

$file = "log/ipdate.dat";

if (!file_exists("log") && !is_dir("log")) mkdir("log", 0777);

if (!file_exists($file)) file_put_contents($file, "");

$allowTime = 120; //防刷新时间

$allowNum = 10; //防刷新次数

$uri = $_SERVER['REQUEST_URI'];

$checkip = md5($ip);

$checkuri = md5($uri);

$yesno = true;

$ipdate = @file($file);

foreach ($ipdate as $k => $v) {

$iptem = substr($v, 0, 32);

$uritem = substr($v, 32, 32);

$timetem = substr($v, 64, 10);

$numtem = substr($v, 74);

if ($time - $timetem < $allowTime) {

if ($iptem != $checkip) $str.= $v;

else {

$yesno = false;

if ($uritem != $checkuri) $str.= $iptem . $checkuri . $time . "1

";

elseif ($numtem < $allowNum) $str.= $iptem . $uritem . $timetem . ($numtem + 1) . "

";

else {

if (!file_exists($fileforbid)) {

$addforbidarr = array(

$ip . "

",

time() . "

",

1

);

file_put_contents($fileforbid, $addforbidarr);

}

file_put_contents("log/forbided_ip.log", $ip . "--" . date("Y-m-d H:i:s", time()) . "--" . $uri . "

", FILE_APPEND);

$timepass = $timetem + $allowTime - $time;

die("Warning:" . "
" . "Sorry,you are forbided by refreshing frequently too much, Pls wait for " . $timepass . " seconds to continue!");

}

}

}

}

if ($yesno) $str.= $checkip . $checkuri . $time . "1

";

file_put_contents($file, $str);

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值