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获得文件扩展名三法
Nov 25 PHP
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
洪恩在线成语词典小偷程序php版
Apr 20 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
php抓取页面的几种方法详解
Jun 17 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 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版本号
2006/10/09 PHP
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
PHP 文件类型判断代码
2009/03/13 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php实现的通用图片处理类
2015/03/24 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
用Python进行websocket接口测试
2020/10/16 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
应用服务器有那些
2012/01/19 面试题
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
小学老师寄语大全
2014/04/04 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
离婚协议书范文
2015/01/26 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
javascript数组includes、reduce的基本使用
2021/07/02 Javascript