1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
frame.php
См. документацию.
1<?
3
4use \Bitrix\Main\ORM\Query\Query;
5use \Bitrix\Security\FrameMaskTable;
6
8{
9 public static function SetHeader()
10 {
11 if((!defined("BX_SECURITY_SKIP_FRAMECHECK") || BX_SECURITY_SKIP_FRAMECHECK!==true) && !CSecurityFrameMask::Check(SITE_ID, $_SERVER["REQUEST_URI"]))
12 {
13 header("X-Frame-Options: SAMEORIGIN");
14 header("Content-Security-Policy: frame-ancestors 'self';");
15 }
16 }
17
18 public static function IsActive()
19 {
20 $bActive = false;
21 foreach(GetModuleEvents("main", "OnPageStart", true) as $event)
22 {
23 if(
24 isset($event["TO_MODULE_ID"]) && $event["TO_MODULE_ID"] === "security"
25 && isset($event["TO_CLASS"]) && $event["TO_CLASS"] === "CSecurityFrame"
26 )
27 {
28 $bActive = true;
29 break;
30 }
31 }
32 return $bActive;
33 }
34
35 public static function SetActive($bActive = false)
36 {
37 if($bActive)
38 {
40 {
41 RegisterModuleDependences("main", "OnPageStart", "security", "CSecurityFrame", "SetHeader", "0");
42 }
43 }
44 else
45 {
47 {
48 UnRegisterModuleDependences("main", "OnPageStart", "security", "CSecurityFrame", "SetHeader");
49 }
50 }
51 }
52}
53
55{
56 public static function Update($arMasks)
57 {
58 global $CACHE_MANAGER;
59
60 if(is_array($arMasks))
61 {
62 $res = FrameMaskTable::deleteList([]);
63 if($res)
64 {
65 $arLikeSearch = array("?", "*", ".");
66 $arLikeReplace = array("_", "%", "\\.");
67 $arPregSearch = array("\\", ".", "?", "*", "'");
68 $arPregReplace = array("/", "\.", ".", ".*?", "\'");
69
70 $added = array();
71 $i = 10;
72 foreach($arMasks as $arMask)
73 {
74 $site_id = trim($arMask["SITE_ID"]);
75 if($site_id == "NOT_REF")
76 $site_id = "";
77
78 $mask = trim($arMask["MASK"]);
79 $mask_site = $mask . "_" . $site_id;
80 if($mask && !array_key_exists($mask_site, $added))
81 {
82 $arMask = array(
83 "SORT" => $i,
84 "FRAME_MASK" => $mask,
85 "LIKE_MASK" => str_replace($arLikeSearch, $arLikeReplace, $mask),
86 "PREG_MASK" => str_replace($arPregSearch, $arPregReplace, $mask),
87 );
88 if($site_id)
89 $arMask["SITE_ID"] = $site_id;
90
91 FrameMaskTable::add($arMask);
92 $i += 10;
93 $added[$mask_site] = true;
94 }
95 }
96
97 if(CACHED_b_sec_frame_mask !== false)
98 $CACHE_MANAGER->CleanDir("b_sec_frame_mask");
99
100 }
101 }
102
103 return true;
104 }
105
106 public static function GetList()
107 {
108 $res = FrameMaskTable::getList(['select' => ['SITE_ID', 'FRAME_MASK'], 'order' => 'SORT']);
109 return $res;
110 }
111
112 public static function Check($siteId, $uri)
113 {
114 global $DB, $CACHE_MANAGER;
115 $bFound = false;
116
117 if(CACHED_b_sec_frame_mask !== false)
118 {
119 $cache_id = "b_sec_frame_mask";
120 if($CACHE_MANAGER->Read(CACHED_b_sec_frame_mask, $cache_id, "b_sec_frame_mask"))
121 {
122 $arMasks = $CACHE_MANAGER->Get($cache_id);
123 }
124 else
125 {
126 $arMasks = array();
127
128 $rs = FrameMaskTable::getList(['order' => 'SORT']);
129 while($ar = $rs->Fetch())
130 {
131 $site_id = $ar["SITE_ID"]? $ar["SITE_ID"]: "-";
132 $arMasks[$site_id][$ar["SORT"]] = $ar["PREG_MASK"];
133 }
134
135 $CACHE_MANAGER->Set($cache_id, $arMasks);
136 }
137
138 if(isset($arMasks["-"]) && is_array($arMasks["-"]))
139 {
140 foreach($arMasks["-"] as $mask)
141 {
142 if(preg_match("#^".$mask."$#", $uri))
143 {
144 $bFound = true;
145 break;
146 }
147 }
148 }
149
150 if(
151 !$bFound
152 && $siteId
153 && isset($arMasks[$siteId])
154 )
155 {
156 foreach($arMasks[$siteId] as $mask)
157 {
158 if(preg_match("#^".$mask."$#", $uri))
159 {
160 $bFound = true;
161 break;
162 }
163 }
164 }
165
166 }
167 else
168 {
169 $sqlHelper = \Bitrix\Main\Application::getConnection()->getSqlHelper();
170
171 $filter = Query::filter()
172 ->whereNull('SITE_ID')
173 ->whereExpr("'".$sqlHelper->forSql($uri)."' LIKE %s", ['LIKE_MASK']);
174
175 if ($siteId)
176 {
177 $filterOr = Query::filter()
178 ->where('SITE_ID', $siteId)
179 ->whereExpr("'".$sqlHelper->forSql($uri)."' LIKE %s", ['LIKE_MASK']);
180
181 $filter = Query::filter()
182 ->logic('or')
183 ->where($filter)
184 ->where($filterOr);
185 }
186
187 $rs = FrameMaskTable::getList(['filter' => $filter]);
188 if($rs->Fetch())
189 $bFound = true;
190 }
191
192 return $bFound;
193 }
194}
195
196?>
static getConnection($name="")
Определения application.php:638
Определения frame.php:8
static IsActive()
Определения frame.php:18
static SetActive($bActive=false)
Определения frame.php:35
static SetHeader()
Определения frame.php:9
Определения frame.php:55
static GetList()
Определения frame.php:106
static Update($arMasks)
Определения frame.php:56
static Check($siteId, $uri)
Определения frame.php:112
global $CACHE_MANAGER
Определения clear_component_cache.php:7
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$bFound
Определения get_search.php:40
$filter
Определения iblock_catalog_list.php:54
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
if(file_exists($_SERVER['DOCUMENT_ROOT'] . "/urlrewrite.php")) $uri
Определения urlrewrite.php:61
$siteId
Определения ajax.php:8
RegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $SORT=100, $TO_PATH="", $TO_METHOD_ARG=[])
Определения tools.php:5295
UnRegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $TO_PATH="", $TO_METHOD_ARG=[])
Определения tools.php:5289
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
$event
Определения prolog_after.php:141
$ar
Определения options.php:199
$i
Определения factura.php:643
$site_id
Определения sonet_set_content_view.php:9
const SITE_ID
Определения sonet_set_content_view.php:12
$rs
Определения action.php:82