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开发大型项目的一点经验
Oct 09 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
Dec 06 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
php 短链接算法收集与分析
Dec 30 PHP
PHP中的Memcache详解
Apr 05 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
php中rename函数用法分析
Nov 15 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
PHP处理Ajax请求与Ajax跨域问题
Feb 13 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
javascript IFrame 强制刷新代码
2009/07/23 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
Python内存映射文件读写方式
2020/04/24 Python
django的autoreload机制实现
2020/06/03 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
上海中网科技笔试题
2012/02/19 面试题
广告学毕业生求职信
2014/01/30 职场文书
收银员岗位职责
2014/02/07 职场文书
优质服务口号
2014/06/11 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
2014年双拥工作总结
2014/11/21 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python