Esempio n. 1
0
 public static function getCode()
 {
     $antiAttack = self::getInstance();
     if (self::$_code != '') {
         return self::$_code;
     }
     $select = $antiAttack->_dbTable->select()->where("ip = ?", $_SERVER['REMOTE_ADDR'])->where("CURRENT_TIMESTAMP < TIMESTAMP(timestamp, '00:15:00')");
     $ip = substr(long2ip(ip2long($_SERVER['REMOTE_ADDR'])), 0, -2) . '%';
     $select->orWhere("ip LIKE ?", $ip)->where("CURRENT_TIMESTAMP < TIMESTAMP(timestamp, '00:05:00')");
     $loggedMetaInfo = $antiAttack->_dbTable->fetchAll($select);
     //avoid DoS attacks...
     //And if something happens with the connection with
     //the database, it may be handy also.
     if (!is_object($loggedMetaInfo)) {
         $behavior = Ml_Model_AntiAttack::ACCESS_FORBIDDEN;
     } else {
         $loggedMetaInfoData = $loggedMetaInfo->toArray();
         $size = sizeof($loggedMetaInfoData);
         if ($size > 250) {
             $behavior = Ml_Model_AntiAttack::ACCESS_FORBIDDEN;
         } else {
             if ($size > 8) {
                 $behavior = Ml_Model_AntiAttack::ACCESS_ENSURE_HUMAN;
             } else {
                 //It defaults to ACCESS_FREE
                 $behavior = Ml_Model_AntiAttack::ACCESS_FREE;
             }
         }
     }
     self::$_code = $behavior;
     return $behavior;
 }