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 相关文章推荐
关于mysql 字段的那个点为是定界符
Jan 15 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
php使用timthumb生成缩略图的方法
Jan 22 PHP
php处理json格式数据经典案例总结
May 19 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
php实现查询功能(数据访问)
May 23 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
laravel 数据验证规则详解
Oct 23 PHP
PHP中类与对象功能、用法实例解读
Mar 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
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
python如何查看网页代码
2020/06/07 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
创业计划书六个要素
2013/12/26 职场文书
社区中秋节活动方案
2014/01/29 职场文书
30年同学聚会感言
2014/01/30 职场文书
大二自我鉴定
2014/01/31 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
电视购物广告词
2014/03/19 职场文书
小兵张嘎观后感
2015/06/03 职场文书