php实现ip防盗刷_Mosan_的博客-程序员宝宝

技术标签: php  

代码如下:

<?php 
//查询禁止IP 
$ip =$_SERVER['REMOTE_ADDR']; 
$fileht=".htaccess2"; 
if(!file_exists($fileht))file_put_contents($fileht,""); 
[email protected]($fileht); 
if(in_array($ip."\r\n",$filehtarr))die("Warning:"."<br>"."Your IP address are forbided by some reason, IF you have any question Pls emill to [email protected]!"); 

//加入禁止IP 
$time=time(); 
$fileforbid="log/forbidchk.dat"; 
if(file_exists($fileforbid)) 
{ if($time-filemtime($fileforbid)>60)unlink($fileforbid); 
else{ 
[email protected]($fileforbid); 
if($ip==substr($fileforbidarr[0],0,strlen($ip))) 

if($time-substr($fileforbidarr[1],0,strlen($time))>600)unlink($fileforbid); 
elseif($fileforbidarr[2]>600){file_put_contents($fileht,$ip."\r\n",FILE_APPEND);unlink($fileforbid);} 
else{$fileforbidarr[2]++;file_put_contents($fileforbid,$fileforbidarr);} 



//防刷新 
$str=""; 
$file="log/ipdate.dat"; 
if(!file_exists("log")&&!is_dir("log"))mkdir("log",0777); 
if(!file_exists($file))file_put_contents($file,""); 
$allowTime = 120;//防刷新时间 
$allowNum=10;//防刷新次数 
$uri=$_SERVER['REQUEST_URI']; 
$checkip=md5($ip); 
$checkuri=md5($uri); 
$yesno=true; 
[email protected]($file); 
foreach($ipdate as $k=>$v) 
{ $iptem=substr($v,0,32); 
$uritem=substr($v,32,32); 
$timetem=substr($v,64,10); 
$numtem=substr($v,74); 
if($time-$timetem<$allowTime){ 
if($iptem!=$checkip)$str.=$v; 
else{ 
$yesno=false; 
if($uritem!=$checkuri)$str.=$iptem.$checkuri.$time."1\r\n"; 
elseif($numtem<$allowNum)$str.=$iptem.$uritem.$timetem.($numtem+1)."\r\n"; 
else 

if(!file_exists($fileforbid)){$addforbidarr=array($ip."\r\n",time()."\r\n",1);file_put_contents($fileforbid,$addforbidarr);} 
file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."\r\n",FILE_APPEND); 
$timepass=$timetem+$allowTime-$time; 
die("Warning:"."<br>"."Sorry,you are forbided by refreshing frequently too much, Pls wait for ".$timepass." seconds to continue!"); 




if($yesno) $str.=$checkip.$checkuri.$time."1\r\n"; 
file_put_contents($file,$str); 
?> 

把程序include进要进行的php文件头部。 
程序首先判断IP是否在禁止列表,如果在则退出; 
否则,如果IP在监控列表,10分钟内点击超过600次则加入禁止列表。 
如果没有超过时间和次数则次数加1,同时,监控IP是否对同一页面频繁操作。 
由于是机器刷频,所以程序不用session判断。 
还有就是更新的时候,不能用独占处理文件。 
使用伪静态存储IP也会出错。 
这个程序还有变化和改进的余地的,大家也可以参考QQ农场里的降级原理,基本上农场也是按照这个原理开发的吧。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35472110/article/details/81055599

智能推荐

CABasicAnimation, CAKeyframeAnimation,CAAnimationGroup动画的用法_夕阳下的守望者的博客-程序员宝宝

一.CAAnimation动画CABasicAnimation, CAKeyframeAnimation 可以通过 animationWithKeyPath 来初始化  CABasicAnimation 有  fromValue 和  toValue 这两个属性CAKeyframeAnimation 有 path(路径)这个属性iOS9新出了一个动画CASpringAnim

关于数组的一些简单操作_SW_SN的博客-程序员宝宝

小小的数组问题,以二维数组为例  int a[2][3]={0};数组所有值都声明为0;  但是如果想把数组所以值都声明为1的话不能像0那样做,而要  int a[2][3]={1,1,1,1,1,1};  如果数组的长度和宽度不确定,要动态声明;  int **b=new int*[n];  for(int i=0;i<n;i++)b[i]=new i

非法入侵竟然如此简单 黑客表演令人愕然(图)_edison20的博客-程序员宝宝

  【日经BP社报道】在Networld+Interop会期间,除了将举办展览会以外还将举行Work Shop活动。此次最抢风光的是题为“Hacking Exposed(黑客行为曝光)”的Work Shop。会场准备的约200个席位基本满座。当在屏幕上出现劫持目标电脑的情形时,全场发出阵阵震惊和叹息。  在这一Work Shop中,实际演示了网络非法入侵者(黑客,Cracker)通过什么顺

如何写优雅的代码(序)——自语_norains的博客-程序员宝宝

//========================================================================//TITLE://    如何写优雅的代码(序)——自语//AUTHOR://    norains//DATE://    Thursday  16-July-2009//Environment://    WINCE5.0 + VS2005//=

【Mysql】创建某个用户只能访问指定的数据库_UniverseLin的博客-程序员宝宝

转载链接: Mysql中使某个用户只能访问指定的数据库.感谢该博主的说明。使用navicat 1)使用root用户新建连接 2)新建MySQL用户 3)点击权限,选择添加权限,出现MySQL中已存在的数据库列表,选择你要为该新建用户开放的数据库,此处选择“test”数据库,选择一些必要的权限信息,确定 4)查看新建用户对数据库的操作权限,如下图 5)很重要的一点,别忘记保存! 6)然后新建连接,输入用户名和密码,打开连接,则新建的那个用户只能看到为他分配的那个数据库 2.命令行实现

DataSource配置详解_zhu473105308的博客-程序员宝宝

10         100         20         60         10      但由于预缓存的statements属于单个connection而不是整个连接池。  所以设置这个参数需要考虑到多方面的因素。     如果maxStatements与maxStatementsPerConnec

随便推点

一次耐人寻味的SQL优化:除了SQL改写,还要考虑什么?_weixin_34032827的博客-程序员宝宝

黄浩2016-11-03 10:36:26作者介绍黄浩,现任职于中国惠普,从业十年,始终专注于SQL。在华为做项目的两年多,做过大大小小的SQL多达1500个。闲暇之余,喜欢将部分案例写成博客发表在华为内部数据库官方社区,反响强烈,已连续四个月蝉联该社区最佳博主。目前已开设专栏“优哉悠斋”,成为首个受邀社区“专家访谈”的外协人员。...

常见的DDL,DML,DCL_Echo_ac的博客-程序员宝宝

SQL: 指结构化查询语言,全称是 Structured Query Language。DDL:Data Definition Language,数据定义语言(create ,alter drop)DML:Data Manipulation Language,数据操作语言,(select, delete,update,insert)DCL:Data Control Language, 数据控制语言,(grant,revoke,commit, rollback)...

oracle数据库安装后如何建立自己的数据库_sunyllove的博客-程序员宝宝_安装完oracle后怎么创建数据库

oracle数据库安装后如何建立自己的数据库 (2012-05-27 15:49:50)转载▼标签: 数据库 oracle 创建表 杂谈       最近,有个人找自己做oracle方面的东西,自己之前搞过数据库,但是没有搞过oracle数据库,有点担心,但是,之后研究了一下

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo问题_嗯哼丶苏苏的博客-程序员宝宝

今天学着写了个底部导航栏滑动切换页面,主要是使用Fragment+ViewPager,项目可编译,但是运行就会报错停止,错误提示如下:手机程序中则是:通过查看错误信息发现报错是MainActivity中的 setContentView(R.layout.activity_main); 但是MainActivity并没有报错,查看R.layout.activity_main布局文件也...

Linux下查看文件和文件夹大小_sunxiaopengsun的博客-程序员宝宝_linux 查看文件夹大小命令

1 Linux下查看文件和文件夹大小2 删除系统日志等场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除多余的日志问题解决!回到顶部1 Linux下查看文件和文件夹大小当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。 d...