php防止ddos,dns,集群攻击的实现代码
2023-09-11 14:14:35 时间
<?php /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +----------------------------------------------------------------------+ // | PHP version 5 | // +----------------------------------------------------------------------+ // | Copyright (c) 1997-2004 The PHP Group | // +----------------------------------------------------------------------+ // | This source file is subject to version 3.0 of the PHP license, | // | that is bundled with this package in the file LICENSE, and is | // | available through the world-wide-web at the following url: | // | http://www.php.net/license/3_0.txt. | // | If you did not receive a copy of the PHP license and are unable to | // | obtain it through the world-wide-web, please send a note to | // | license@php.net so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ // | Authors: Original Author <author@example.com> | // | Your Name <you@example.com> | // +----------------------------------------------------------------------+ // // $Id:$ /** * 防止ddos、dns、集群等攻击 * edit www.cxyblog.com */ //查询禁止IP $ip = $_SERVER['REMOTE_ADDR']; $fileht = ".htaccess2"; if (!file_exists($fileht)) file_put_contents($fileht, ""); $filehtarr = @file($fileht); if (in_array($ip . " ", $filehtarr)) die("Warning:" . "<br>" . "Your IP address are forbided by some reason, IF you have any question Pls emill to shop@jbxue.com!"); //加入禁止IP $time = time(); $fileforbid = "log/forbidchk.dat"; if (file_exists($fileforbid)) { if ($time - filemtime($fileforbid) > 60) unlink($fileforbid); else { $fileforbidarr = @file($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 . " ", 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; $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 . "1 "; elseif ($numtem < $allowNum) $str.= $iptem . $uritem . $timetem . ($numtem + 1) . " "; else { if (!file_exists($fileforbid)) { $addforbidarr = array( $ip . " ", time() . " ", 1 ); file_put_contents($fileforbid, $addforbidarr); } file_put_contents("log/forbided_ip.log", $ip . "--" . date("Y-m-d H:i:s", time()) . "--" . $uri . " ", 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 "; file_put_contents($file, $str); ?>
http://u.cxyblog.com/14/article-aid-206.html?utm_source=tuicool&utm_medium=referral
相关文章
- PHP使用RabbitMQ实例
- PHP函数 addslashes() 和 mysql_real_escape_string() 的区别 && SQL宽字节,绕过单引号注入攻击
- Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)
- PHP常量PHP_SAPI与函数php_sapi_name()简介,PHP运行环境检测
- PHP安装模式cgi、fastcgi、php_mod比较
- Linux下的Apache和PHP安全设置,如何开启PHP的安全模式
- PHP 性能优化 - php.ini 配置
- php:PHP解析xml的4种方法
- dns未设置 PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed:
- PHP中大括号{}用法总结
- php分享二十七:批量插入mysql
- php分享二十六:读写日志
- php分享十一:PHP实现异步调用方法研究
- PHP中获取当前页面的完整URL & php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别
- 使用 PHP 构建的 Web 应用如何避免 XSS 攻击
- PHP高效率写法(详解原因)
- LZW算法PHP实现方法 lzw_decompress php
- PHP编程效率的20个要点
- php函数ob_start()、ob_end_clean()、ob_get_contents()
- file not found. nginx php nginx 如何开启解析 PHP 的功能
- LZW算法PHP实现方法 lzw_decompress php
- Relearning PHP (2) – php 的浮点数float
- [PHP] 如何让 php-fpm 的循环 echo 实时输出到浏览器
- [php-src] Php扩展开发的琐碎注意点、细节
- [php-src] Php扩展的多文件编译
- [php-src] 理解Php内核中的函数与INI
- Atitit php pdo的api使用 目录 1.1. PHP PDO简介1 1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT1 2. 其他设置2 2.1. )、P
- Atitit 前端测试最简化内嵌web服务器 php 与node.js 目录 1.1. php内置Web Server1 1.2. Node的2 Node的比较麻烦些。。Php更加简单
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
- PHP常用的代码编辑工具
- php中的正则函数主要有三个-正则匹配,正则替换