本文最后更新于2019年5月13日,已超过 1 年没有更新,如果文章内容失效,请 反馈 给我们,谢谢!
这个PHP文件主要是用来防止网站被恶意CC攻击的,它可以设置在多少秒内刷新多少次数后自动触发,比如设置60秒内25次,在60秒内刷新次数达到25次后就会触发并且刷新越快等待时间越长,这个根据自身硬件情况自行设置代码中的各种语句都已经标明了注释方便自行修改。一般只需要修改第10到12行,时间段、刷新次数和日志开关。
可把引用到全站PHP文件的头部,比如数据库连接文件等即可。
CC日志效果如下图
PHP代码如下(请勿直接复制以防出错请在页面底部下载源码):
<?php
/*
来源:森林之家(www.foresthouse.cn)
*/
//代理IP直接退出
empty($_SERVER['HTTP_VIA']) or exit('Access Denied');
//防止快速刷新(在下面的时间段内达到刷新次数后触发)
session_start();
$seconds = '60'; //时间段[秒]
$refresh = '25'; //刷新次数
$on_off = "on";//日志开关(如果不需要日志请把on随便改个东东)
//设置监控变量
$cur_time = time();
if(isset($_SESSION['last_time'])){
$_SESSION['refresh_times'] += 1;
}else{
$_SESSION['refresh_times'] = 1;
$_SESSION['last_time'] = $cur_time;
}
//保存CC日志函数
function logcc($logcc)
{
$logpath=$_SERVER["DOCUMENT_ROOT"]."/cc.txt";//保存CC日志到网站根目录
$log_f=fopen($logpath,"a+");
fputs($log_f,$logcc."\r\n");
}
//处理监控结果
if($cur_time - $_SESSION['last_time'] < $seconds){//判断刷新时间是否小于设定的时间(时间段[秒])
if($_SESSION['refresh_times'] >= $refresh){//判断刷新次数是否大于设定的刷新次数
$wait = $seconds - ($cur_time - $_SESSION['last_time']);//等待时间/跳转时间
if ($_SESSION['refresh_times'] == $refresh && $on_off=="on"){//时间段内等于刷新次数才记录(避免每次刷新都会记录)
logcc("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>页面:".$_SERVER["PHP_SELF"]."");
}
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//攻击者跳转地址(依然为当前网址)
//前台
echo <<<EOT
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>西顾5秒盾</title>
<h3><center><font color="#FF0000">检测到cc攻击请原地等待<span id="time">00</span>秒</font></center></h3>
<meta http-equiv="refresh" content=$wait; url="$url"/>
<script src="https://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<script type = "text/javascript">
var i = $wait-1;
var t = setInterval(function() {
if (i == 0) {
clearInterval(t);
return;
}
document.getElementById("time").innerHTML = i;
i--;
},
1000)
</script>
</head>
</html>
EOT;
exit();
}
}else{
//重置
$_SESSION['refresh_times'] = 0;
$_SESSION['last_time'] = $cur_time;
}
?>

