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函数
May 31 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
Sep 30 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 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
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js中的this关键字详解
2013/09/25 Javascript
js opener的使用详解
2014/01/11 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
详谈js的变量提升以及使用方法
2018/10/06 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
python2.7到3.x迁移指南
2018/02/01 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
药学职务聘任书
2014/03/29 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
环境日宣传活动总结
2014/07/09 职场文书
销售团队获奖感言
2014/08/14 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
重温入党誓词主持词
2015/06/29 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS