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、付费专栏及课程。

余额充值