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(3)
Oct 09 PHP
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
自己动手做一个SQL解释器
Oct 09 PHP
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
php引用地址改变变量值的问题
Mar 23 PHP
解析php类的注册与自动加载
Jul 05 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP的JSON封装、转变及输出操作示例
Sep 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
8个必备的PHP功能实例代码
2013/10/27 PHP
php支付宝接口用法分析
2015/01/04 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
python实现学生管理系统
2018/01/11 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
Python socket模块方法实现详解
2019/11/05 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
政治学专业毕业生求职信
2014/08/11 职场文书
陕西导游词
2015/02/04 职场文书
新员工辞职信范文
2015/05/12 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
德生2P3收音机开箱评测
2022/04/30 无线电
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS