• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/composite/responder.php
  • Класс: BitrixMainCompositeResponder
  • Вызов: Responder::isValidRequest
static function isValidRequest()
{
	if (
		isset($_SERVER["HTTP_BX_AJAX"]) ||
		isset($_GET["bxajaxid"]) ||
		(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && $_SERVER["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest")
	)
	{
		self::$error = Logger::TYPE_AJAX_REQUEST;
		return false;
	}

	if (isset($_GET["ncc"]))
	{
		self::$error = Logger::TYPE_NCC_PARAMETER;
		return false;
	}

	if (Helper::isBitrixFolder())
	{
		self::$error = Logger::TYPE_BITRIX_FOLDER;
		return false;
	}

	if (preg_match("#^/index_controller\.php#", $_SERVER["REQUEST_URI"]) > 0)
	{
		self::$error = Logger::TYPE_CONTROLLER_FILE;
		return false;
	}

	//to warm up localStorage
	define("ENABLE_HTML_STATIC_CACHE_JS", true);

	if ($_SERVER["REQUEST_METHOD"] !== "GET")
	{
		self::$error = Logger::TYPE_GET_METHOD_ONLY;
		self::$errorMessage = "Request Method: ".$_SERVER["REQUEST_METHOD"];
		return false;
	}

	if (isset($_GET["sessid"]))
	{
		self::$error = Logger::TYPE_SESSID_PARAMETER;
		return false;
	}

	$compositeOptions = Helper::getOptions();

	//NCC cookie exists
	if (isset($compositeOptions["COOKIE_NCC"]) &&
		array_key_exists($compositeOptions["COOKIE_NCC"], $_COOKIE) &&
		$_COOKIE[$compositeOptions["COOKIE_NCC"]] === "Y"
	)
	{
		self::$error = Logger::TYPE_NCC_COOKIE;
		return false;
	}

	//A stored authorization exists, but CC cookie doesn't exist
	if (
		isset($compositeOptions["STORE_PASSWORD"]) &&
		$compositeOptions["STORE_PASSWORD"] == "Y" &&
		isset($_COOKIE[$compositeOptions["COOKIE_LOGIN"]]) &&
		$_COOKIE[$compositeOptions["COOKIE_LOGIN"]] !== "" &&
		isset($_COOKIE[$compositeOptions["COOKIE_PASS"]]) &&
		$_COOKIE[$compositeOptions["COOKIE_PASS"]] !== ""
	)
	{
		if (
			!isset($compositeOptions["COOKIE_CC"]) ||
			!array_key_exists($compositeOptions["COOKIE_CC"], $_COOKIE) ||
			$_COOKIE[$compositeOptions["COOKIE_CC"]] !== "Y"
		)
		{
			self::$error = Logger::TYPE_CC_COOKIE_NOT_FOUND;
			return false;
		}
	}

	$queryPos = mb_strpos($_SERVER["REQUEST_URI"], "?");
	$requestUri = $queryPos === false? $_SERVER["REQUEST_URI"] : mb_substr($_SERVER["REQUEST_URI"], 0, $queryPos);

	//Checks excluded masks
	if (isset($compositeOptions["~EXCLUDE_MASK"]) && is_array($compositeOptions["~EXCLUDE_MASK"]))
	{
		foreach ($compositeOptions["~EXCLUDE_MASK"] as $mask)
		{
			if (preg_match($mask, $requestUri) > 0)
			{
				self::$error = Logger::TYPE_EXCLUDE_MASK;
				self::$errorMessage = "Mask: ".$mask;
				return false;
			}
		}
	}

	//Checks excluded GET params
	if (isset($compositeOptions["~EXCLUDE_PARAMS"]) && is_array($compositeOptions["~EXCLUDE_PARAMS"]))
	{
		foreach ($compositeOptions["~EXCLUDE_PARAMS"] as $param)
		{
			if (array_key_exists($param, $_GET))
			{
				self::$error = Logger::TYPE_EXCLUDE_PARAMETER;
				self::$errorMessage = "Parameter: ".$param;
				return false;
			}
		}
	}

	//Checks included masks
	$isRequestInMask = false;
	if (isset($compositeOptions["~INCLUDE_MASK"]) && is_array($compositeOptions["~INCLUDE_MASK"]))
	{
		foreach ($compositeOptions["~INCLUDE_MASK"] as $mask)
		{
			if (preg_match($mask, $requestUri) > 0)
			{
				$isRequestInMask = true;
				break;
			}
		}
	}

	if (!$isRequestInMask)
	{
		self::$error = Logger::TYPE_INCLUDE_MASK;
		return false;
	}

	//Checks hosts
	$host = Helper::getHttpHost();
	if (!in_array($host, Helper::getDomains()))
	{
		self::$error = Logger::TYPE_INVALID_HOST;
		self::$errorMessage = "Host: ".$host;
		return false;
	}

	if (!self::isValidQueryString($compositeOptions))
	{
		self::$error = Logger::TYPE_INVALID_QUERY_STRING;
		return false;
	}

	return true;
}