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伪静态页面函数附使用方法
Jun 20 PHP
php 冒泡排序 交换排序法
May 10 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
php中{}大括号是什么意思
Dec 01 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
PHP循环结构实例讲解
Feb 10 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
php桥接模式应用案例分析
Oct 23 PHP
PHP正则表达式之RCEService回溯
Apr 11 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+DBM的同学录程序(1)
2006/10/09 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
PHP可变函数学习小结
2015/11/29 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
Vue键盘事件用法总结
2017/04/18 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
自己使用总结Python程序代码片段
2015/06/02 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
Python tcp传输代码实例解析
2020/03/18 Python
python datetime处理时间小结
2020/04/16 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
银行服务明星推荐材料
2014/05/29 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
领导参观欢迎词
2015/01/26 职场文书
学子宴致辞大全
2015/07/27 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书