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; }