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 相关文章推荐
杏林同学录(七)
Oct 09 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
PHP语法速查表
Dec 06 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
微信公众号OAuth2.0网页授权问题浅析
Jan 21 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
phpquery中文手册
Mar 18 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操作redis常见方法示例【key与value操作】
2020/04/14 PHP
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
pace.js页面加载进度条插件
2015/09/29 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
浅谈js原生拖放
2016/11/21 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
python为tornado添加recaptcha验证码功能
2014/02/26 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
python标识符命名规范原理解析
2020/01/10 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
写自荐信的七个技巧
2013/10/15 职场文书
办公室文秘岗位职责
2013/11/15 职场文书
前台文员岗位职责及工作流程
2013/11/19 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
联欢晚会主持词
2014/03/25 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS