Example #1
0
 function defender($ret = false)
 {
     $info = Request::info();
     if (self::$ip) {
         if (in_array($info['ip'], self::$ip)) {
             $hit['ip'] =& $info['ip'];
             goto block;
         }
     }
     if (self::$ajax) {
         var_dump($info);
         if (!$info['ajax']) {
             $hit['ajax'] =& $info['ajax'];
             goto block;
         }
     }
     if (self::$refer) {
         while (list($k, $v) = each(self::$refer)) {
             if (stripos($info['refer'], $v) !== false) {
                 $hit['refer'] =& $info['refer'];
                 goto block;
             }
         }
     }
     if (self::$session) {
         $session = Request::session();
         while (list($k, $v) = each(self::$session)) {
             if (!isset($session[$v])) {
                 $hit['session'] = $v;
                 goto block;
             }
         }
     }
     if (self::$cookie) {
         $cookie = Request::cookie();
         while (list($k, $v) = each(self::$cookie)) {
             if (!isset($cookie[$v])) {
                 $hit['cookie'] = $v;
                 goto block;
             }
         }
     }
     if (self::$post) {
         $post = Request::post();
         while (list($k, $v) = each(self::$post)) {
             if (!isset($post[$v])) {
                 $hit['post'] = $v;
                 goto block;
             }
         }
     }
     if (self::$get) {
         $get = Request::get();
         while (list($k, $v) = each(self::$get)) {
             if (!isset($get[$v])) {
                 $hit['get'] = $v;
                 goto block;
             }
         }
     }
     if (self::$frequency) {
         $ssid = 'frequency';
         $data = json_decode(session_get($ssid), 1);
         $data[$ssid][] = APP_START_TIME;
         list($k, $v) = each(self::$frequency);
         $size = count($data[$ssid]);
         if ($size > $v) {
             $sec = APP_START_TIME - $data[$ssid][$size - $v];
             if ($sec < $k) {
                 $data['block'] = APP_START_TIME + self::$blockTime;
                 ///超出限制
             }
             if ($size > ($k + 1) * ($v + 1)) {
                 unset($data[$ssid]);
             }
         }
         if (isset($data['block'])) {
             if ($data['block'] < APP_START_TIME) {
                 unset($data['block']);
             } else {
                 session_set($ssid, $data);
                 $t = intval($data['block'] - APP_START_TIME);
                 $this->frequencyBlock($t);
                 exit;
             }
         }
         session_set($ssid, $data);
     }
     block:
     if (isset($hit)) {
         if ($ret) {
             return $hit;
         } else {
             $this->block($hit);
         }
     } else {
         return null;
     }
 }