php 禁止刷ip,PHP防止恶意频繁刷新,自动加ip黑名单禁止访问

PHP防止恶意频繁刷新,自动加ip黑名单禁止访问

2021-01-22    作者:Admin    来源:www.luexuan.net

$ip = get_client_ip_extend();//获取当前访问者的ip

$logFilePath = '/ippath/';//日志记录文件保存目录

$fileht = '.htaccess2';//被禁止的ip记录文件

$allowtime = 60;//防刷新时间

$allownum = 10;//防刷新次数

$allowRefresh = 120;//在允许刷新次数之后加入禁止ip文件中

if (!file_exists($fileht)) {

file_put_contents($fileht, '');

}

$filehtarr = @file($fileht);

if (in_array($ip . "\r\n", $filehtarr)) {

$message = '警告:你的IP已经被禁止了!';

if ($type === 'API') {

return $message;

}

$this->error($message);

}

//加入禁止ip

$time = time();

$fileforbid = $logFilePath . 'forbidchk.dat';

if (file_exists($fileforbid)) {

if ($time - filemtime($fileforbid) > 30) {

@unlink($fileforbid);

} else {

$fileforbidarr = @file($fileforbid);

if ($ip == substr($fileforbidarr[0], 0, strlen($ip))) {

if ($time - substr($fileforbidarr[1], 0, strlen($time)) > 120) {

@unlink($fileforbid);

} else if ($fileforbidarr[2] > $allowRefresh) {

file_put_contents($fileht, $ip . "rn", FILE_APPEND);

@unlink($fileforbid);

} else {

$fileforbidarr[2]++;

file_put_contents($fileforbid, $fileforbidarr);

}

}

}

}

//防刷新

$str = '';

$file = $logFilePath . 'ipdate.dat';

if (!file_exists($logFilePath) && !is_dir($logFilePath)) {

mkdir($logFilePath, 0777);

}

if (!file_exists($file)) {

file_put_contents($file, '');

}

$uri = $_SERVER['REQUEST_URI'];//获取当前访问的网页文件地址

$checkip = md5($ip);

$checkuri = md5($uri);

$yesno = true;

$ipdate = @file($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 . "rn";

} else if ($numtem < $allownum) {

$str .= $iptem . $uritem . $timetem . ($numtem + 1) . "rn";

} else {

if (!file_exists($fileforbid)) {

$addforbidarr = array($ip . "rn", time() . "rn", 1);

file_put_contents($fileforbid, $addforbidarr);

}

file_put_contents($logFilePath . 'forbided_ip.log', $ip . '--' . date('Y-m-d H:i:s', time()) . '--' . $uri . "rn", FILE_APPEND);

//$timepass = $timetem + $allowtime - $time;

$message = '警告:不要刷新的太频繁!';

if ($type === 'API') {

return $message;

}

$this->error($message);

}

}

}

}

if ($yesno) {

$str .= $checkip . $checkuri . $time . "rn";

}

file_put_contents($file, $str);

?>

阅读:44

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值