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下尝试使用GraphicsMagick的缩略图功能
Jan 01 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
解析php中获取系统信息的方法
Jun 25 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
codeigniter框架批量插入数据
Jan 09 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php解析xml方法实例详解
May 12 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 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中的登陆login
2007/01/18 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Python如何将字符串转换为日期
2020/07/31 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
C语言笔试题
2014/09/04 面试题
写自荐信的七个技巧
2013/10/15 职场文书
高中生自我鉴定范文
2013/10/30 职场文书
国际经济贸易专业推荐信
2013/11/06 职场文书
家长对小学生的评语
2014/01/28 职场文书
反腐倡廉标语
2014/06/24 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
2014年体育工作总结
2014/11/24 职场文书
北大自主招生自荐信
2015/03/04 职场文书
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python