• php防止ddos,dns,集群攻击的实现代码


    <?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

  • 相关阅读:
    Cocos2d-x学习笔记(二十五)之 加速度传感器事件
    Cocos2d-x学习笔记(二十四)之 触屏事件
    Cocos2d-x学习笔记(二十三)之 动画
    Cocos2d-x学习笔记(二十二)之 网格动作
    Cocos2d-x学习笔记(二十一)之 动作管理类CCActionManager
    Cocos2d-x学习笔记(二十)之 组合动作
    Cocos2d-x学习笔记(十九)之 缓冲动作
    Cocos2d-x学习笔记(十八)之 基本动作
    Cocos2d-x学习笔记(十七)之 动作类CCAction
    Cocos2d-x学习笔记(十六)之 定时器(时间调度)
  • 原文地址:https://www.cnblogs.com/chunguang/p/5583660.html
Copyright © 2020-2023  润新知