PHP程序防止ddos,dns,集群服务器攻击

<?php
//查询禁止IP
$ip =$_SERVER['REMOTE_ADDR'];
$fileht=".htaccess2";
if(!file_exists($fileht))
	file_put_contents($fileht,"");

$filehtarr=@file($fileht);

if(in_array($ip."\r\n",$filehtarr))
	die("Warning:"."<br>"."Your IP address are forbided by some reason, IF you have any question Pls emill to shop@mydalle.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."\r\n",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\r\n";
			elseif($numtem<$allowNum)
				$str.=$iptem.$uritem.$timetem.($numtem+1)."\r\n";
			else {
				if(!file_exists($fileforbid)) {
					$addforbidarr=array($ip."\r\n",time()."\r\n",1);
					file_put_contents($fileforbid,$addforbidarr);
				}
				file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."\r\n",FILE_APPEND);
				$timepass=$timetem+$allowTime-$time;
				die("Warning:"."<br>"."Sorry,you are forbided by refreshing frequently too much, Pls wait for ".$timepass." seconds to continue!");
			}
		}
	}
}
if($yesno) $str.=$checkip.$checkuri.$time."1\r\n";
file_put_contents($file,$str);
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值