php防止CC攻击代码 php防止网页频繁刷新


Posted in PHP onDecember 21, 2015

网页快速恶意刷新,cc攻击就是攻击者利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,特别是访问那些需要大量数据操作需要大量CUP时间的页面,最终导致目标网站服务器资源耗尽,一直到宕机崩溃,如此一来,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。我们称之为CC攻击。尽管我们可以借助于一些防攻击的软件来实现,不过效果有时并不明显。

下面我提供一段PHP的代码,可以起到一定的防CC攻击效果。
主要功能:在3秒内连续刷新页面5次以上将指向本机 http://127.0.0.1 
只需将该代码放到需要防CC攻击的页面即可。
源码

<?php
$timestampcc = time();
$cc_nowtime = $timestampcc;
if(session_is_registered('cc_lasttime')){
 $cc_lasttime = $_SESSION['cc_lasttime'];
 $cc_times = $_SESSION['cc_times']+1;
 $_SESSION['cc_times'] = $cc_times;
}else{
 $cc_lasttime = $cc_nowtime;
 $cc_times = 1;
 $_SESSION['cc_times'] = $cc_times;
 $_SESSION['cc_lasttime'] = $cc_lasttime;
} 
if(($cc_nowtime-$cc_lasttime)<3){//3秒内刷新5次以上可能为cc攻击
 if($cc_times>=5){
 echo '刷新太快!';
 exit;
 }
}else{
 $cc_times = 0;
 $_SESSION['cc_lasttime'] = $cc_nowtime;
 $_SESSION['cc_times'] = $cc_times;
} 
?>

下面是为大家整理的PHP防CC攻击的有效方法:

1.session记录
submit.php为发送页面,在这个页面上设置一个session变量,并作为隐藏域和表单一起发送到submitdeal.php页面,在服务器端把post上来的隐藏变量和服务器端记录的session变量进行对比,比如一样,则写入数据库并清除session,这样用户刷新页面,两个值不相等提示错误或跳转。
优点:不用用户输入验证码
缺点:表单容易被复制
2.验证码
原理和第一种一样,只是session数据不作为隐藏域提交,而是让用户填写,大多数网站都采用文字验证码和图片验证码,图片验证码安全性高。

3.IP绑定
提交数据后,先从IP表里检索客户端IP,如果有,并且没有过期,那么报错,否则写入数据库,然后再取客房端IP,把IP写入数据库。
4.cookie:客户提交后处理程序先检索客户端有没有设置cookie,如果有,则不重复提交;如果没有,则写数据,再写个cookie;
例:

用户无意义的频繁跳转、请求都会给服务器加重很多负担 其实 用cookie就可以防止这一点。

<?php 
error_reporting(0); 
//if($_COOKIE["ck"])die("刷新过快!"); 
if($_COOKIE["ck"])header("Location:http://www.baidu.com");//这里如果用户刷新过快,给予终止php脚本或者直接302跳转 
setcookie("ck","1",time()+3);//设定cookie存活时间3s 
echo "hello!"; 
?>

方式一:

<?php  
session_start();  
$k=$_GET['k'];  
$t=$_GET['t'];  
$allowTime = 1800;//防刷新时间  
$ip = get_client_ip();  
$allowT = md5($ip.$k.$t);  
if(!isset($_SESSION[$allowT]))  
{  
 $refresh = true;  
 $_SESSION[$allowT] = time();  
}elseif(time() - $_SESSION[$allowT]>$allowTime){  
 $refresh = true;  
 $_SESSION[$allowT] = time();  
}else{  
 $refresh = false;  
}  
?>

 方式二:

<? 
session_start(); 
if(!emptyempty($_POST[name])){ 
 $data = $_POST[name]; 
 $tag = $_POST[tag]; 
 if($_SESSION[status]==$tag){ 
 echo $data; 
 }else{ 
 echo "不允许刷新!"; 
 } 
} 
$v = mt_rand(1,10000); 
?> 
<form method="post" name="magic" action="f5.php"><input type="hidden" 
name="tag" value="<?=$v?>"><input type=text name="name"><input type="submit" value="submit"> 
</form> 
<? 
echo $v; 
$_SESSION[status] = $v; 
?>

方式三:

<? 
session_start(); 
if(!emptyempty($_POST[name])){ 
 $data = $_POST[name]; 
 $tag = $_POST[tag]; 
 if($_SESSION[status]==$tag){ 
 echo $data; 
 }else{ 
 echo "不允许刷新!"; 
 } 
} 
$v = mt_rand(1,10000); 
?> 
<form method="post" name="magic" action="f5.php"><input type="hidden" 
name="tag" value="<?=$v?>"><input type=text name="name"><input type="submit" value="submit"> 
</form> 
<? 
echo $v; 
$_SESSION[status] = $v; 
?>

以上就是php防止CC攻击的多种方式,希望能帮助大家防止网页快速恶意刷新。

PHP 相关文章推荐
php的access操作类
Apr 09 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php模板函数 正则实现代码
Oct 15 PHP
PHP基本语法总结
Sep 06 PHP
php获取随机数组列表的方法
Nov 13 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
详解PHP PDO简单教程
May 28 PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 PHP
php中yar框架实例用法讲解
Dec 27 PHP
PHP版本常用的排序算法汇总
Dec 20 #PHP
php封装好的人民币数值转中文大写类
Dec 20 #PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 #PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 #PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 #PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 #PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 #PHP
You might like
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP连接access数据库
2015/03/27 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
python实现倒计时的示例
2014/02/14 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
如何写python的配置文件
2020/06/07 Python
Python中bisect的用法及示例详解
2020/07/20 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
开业庆典策划方案
2014/02/18 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
毕业生就业意向书
2014/04/01 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
企业环保标语
2014/06/10 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
委托书格式要求
2015/01/28 职场文书
步步惊心观后感
2015/06/12 职场文书
开业庆典致辞
2015/08/01 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL