14 if (!defined(
"BX_SECURITY_LOCAL_REDIRECT"))
16 define(
"BX_SECURITY_LOCAL_REDIRECT",
true);
33 if ($skip_security_check)
42 $url = str_replace(
"\xe2\x80\xae",
"",
$url);
43 $url_l = str_replace(
array(
"\r",
"\n"),
"",
$url);
47 if (preg_match(
'~^(?:http|https)://~iD', $url_l))
49 $uri = new \Bitrix\Main\Web\Uri($url_l);
50 $destinationHost =
$uri->getHost();
52 if (defined(
"BX24_HOST_NAME"))
55 "SERVER_NAME" => BX24_HOST_NAME,
59 elseif (defined(
"SITE_ID"))
61 $rsSite = CSite::GetByID(
SITE_ID);
62 $arSite = $rsSite->Fetch();
69 if (!$bSkipCheck && $arSite && $arSite[
"SERVER_NAME"])
71 $bSkipCheck = $destinationHost === $arSite[
"SERVER_NAME"];
74 if (!$bSkipCheck && $arSite && $arSite[
"DOMAINS"])
76 $arDomains = explode(
"\n", str_replace(
"\r",
"\n", $arSite[
"DOMAINS"]));
77 foreach($arDomains as $domain)
79 $domain = trim($domain,
" \t\n\r");
82 if ($domain === mb_substr($destinationHost, -mb_strlen($domain)))
93 $host = COption::GetOptionString(
"main",
"server_name",
"");
94 $bSkipCheck =
$host && $destinationHost ===
$host;
97 if (stripos($destinationHost,
'%2f') !==
false)
104 if (!$bSkipCheck && preg_match(
"/^(http|https|ftp):\\/\\//i", $url_l))
112 $REFERER_TO_CHECK = (
$_SERVER[
"HTTP_REFERER"] ??
'');
115 if ($good && COption::GetOptionString(
"security",
"redirect_referer_check") ==
"Y")
117 $good &= $REFERER_TO_CHECK <>
'';
120 if ($good && $REFERER_TO_CHECK <>
'' && COption::GetOptionString(
"security",
"redirect_referer_site_check") ==
"Y")
122 $valid_site = (
$APPLICATION->IsHTTPS()?
"https://":
"http://").$_SERVER[
'HTTP_HOST'].
"/";
123 $good &= mb_strpos($REFERER_TO_CHECK, $valid_site) === 0;
126 if ($good && COption::GetOptionString(
"security",
"redirect_href_sign") ==
"Y")
128 $sid = static::GetSeed();
129 $good &= static::Sign($sid,
$url) === $_GET[
"af"];
132 $host = (new \Bitrix\Main\Web\Uri(
$url))->getHost();
145 if (COption::GetOptionString(
"security",
"redirect_log") ==
"Y")
155 if (COption::GetOptionString(
"security",
"redirect_action") ==
"show_message_and_stay")
157 $mess = COption::GetOptionString(
"security",
"redirect_message_warning_".LANGUAGE_ID);
160 $mess = COption::GetOptionString(
"security",
"redirect_message_warning");
163 $charset = COption::GetOptionString(
"security",
"redirect_message_charset");
173 if (preg_match(
'~^(http|https)(://)(.*?)(?:\\\\|/|\?|#|$)~iD', $url_c, $arMatch))
176 $converted = $converter->Encode($arMatch[3]);
177 $converted = $converted ? $converted : $arMatch[3];
178 $url_e = $arMatch[1].$arMatch[2]. $converted .mb_substr($url_c, mb_strlen($arMatch[1].$arMatch[2].$arMatch[3]));
186 $html_url =
'<nobr><a href="'.htmlspecialcharsbx($url_e).
'">'.
htmlspecialcharsEx($url_c).
'</a></nobr>';
187 $html_mess = str_replace(
"#URL#", $html_url, $html_mess);
189 header(
'X-Frame-Options: DENY');
190 header(
'X-Robots-Tag: noindex, nofollow');
194<meta
http-equiv=
"Content-Type" content=
"text/html; charset=<?echo $charset?>" />
195<meta name=
"robots" content=
"noindex, nofollow" />
196<link rel=
"stylesheet" type=
"text/css" href=
"/bitrix/themes/.default/adminstyles.css" />
197<link rel=
"stylesheet" type=
"text/css" href=
"/bitrix/themes/.default/404.css" />
201<div
class=
"error-404">
202<table
class=
"error-404" border=
"0" cellpadding=
"0" cellspacing=
"0" align=
"center">
203 <tbody><tr
class=
"top">
204 <td
class=
"left"><div
class=
"empty"></div></td>
205 <td><div
class=
"empty"></div></td>
206 <td
class=
"right"><div
class=
"empty"></div></td>
209 <td
class=
"left"><div
class=
"empty"></div></td>
211 <div
class=
"description">
212 <table cellpadding=
"0" cellspacing=
"0">
214 <td><div
class=
"icon"></div></td>
215 <td><?=$html_mess?></td>
220 <td
class=
"right"><div
class=
"empty"></div></td>
223 <td
class=
"left"><div
class=
"empty"></div></td>
224 <td><div
class=
"empty"></div></td>
225 <td
class=
"right"><div
class=
"empty"></div></td>
236 $url = COption::GetOptionString(
"security",
"redirect_url");
283 static $arUrls =
false;
285 static $strDomains =
false;
290 $sid = static::GetSeed();
292 foreach($arDomains as
$i => $domain)
294 $arDomains[
$i] = preg_quote($domain,
"/");
296 $strDomains =
"/.*(".implode(
"|", $arDomains).
")$/";
299 foreach($arUrls as $arUrl)
301 if (preg_match(
"/^(http(?:s){0,1}\\:\\/\\/(?:[a-zA-Z0-9\\.-])+){0,1}".preg_quote($arUrl[
"URL"],
"/").
"?.*?".preg_quote($arUrl[
"PARAMETER_NAME"],
"/").
"=(http|https|ftp)(:|%3A|%3A)(\\/\\/|%2F%2F|%2F%2F)([^&]+)/im",
$matches[3], $match))
303 if ($match[1] ==
'' || preg_match($strDomains, $match[1]))
305 $goto = $match[2].$match[3].$match[4].$match[5];
307 array(
"%",
"%3A",
"%2F"),
308 array(
"%",
":",
"/"),
311 return $matches[1].$matches[2].$matches[3].
"&af=".static::Sign($sid, urldecode($goto)).$matches[4];
324 if (CACHED_b_sec_redirect_url !==
false)
326 $cache_id =
"b_sec_redirect_url";
327 if (
$CACHE_MANAGER->Read(CACHED_b_sec_filter_mask, $cache_id,
"b_sec_redirect_url"))
334 $rs = RedirectRuleTable::getList([
335 "select" => [
"URL",
"PARAMETER_NAME",
"IS_SYSTEM"],
336 "order" => [
"IS_SYSTEM" =>
"DESC",
"SORT" =>
"ASC"]]
349 $rs = RedirectRuleTable::getList([
350 "select" => [
"URL",
"PARAMETER_NAME",
"IS_SYSTEM"],
351 "order" => [
"IS_SYSTEM" =>
"DESC",
"SORT" =>
"ASC"]]