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实现Socket服务器的代码
Apr 03 PHP
php分页思路以及在ZF中的使用
May 30 PHP
PHP中数组定义的几种方法
Sep 01 PHP
php二维数组排序详解
Nov 06 PHP
php中的curl_multi系列函数使用例子
Jul 29 PHP
php编写的一个E-mail验证类
Mar 25 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
Smarty模板类内部原理实例分析
Jul 03 PHP
PHP常用header头定义代码示例汇总
Aug 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
js中top的作用深入剖析
2014/03/04 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python中functools模块函数解析
2017/03/12 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
什么是Python中的顺序表
2020/06/02 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
C语言编程题
2015/03/09 面试题
Javascript如何发送一个Ajax请求
2015/01/26 面试题
世界经理人咨询有限公司面试
2014/09/23 面试题
办公室主任职责范文
2013/11/08 职场文书
环保标语口号
2014/06/13 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
开天辟地观后感
2015/06/09 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python