coreUrlParse($_SERVER['REQUEST_URI']); $GLOBALS['page_id'] = [(isset($_REQUEST['id']) ? $_REQUEST['id'] : '') => ['page' => floatval(0)]]; //-- Если пришел вызов на показ ревизии документа if (! empty($_REQUEST['revission'])) { $sql = " SELECT doc_data FROM " . PREFIX . "_document_rev WHERE doc_id = '" . (int)$_REQUEST['id'] . "' AND doc_revision = '" . (int)$_REQUEST['revission'] . "' LIMIT 1 "; $res = $AVE_DB->Query($sql)->GetCell(); $res = @unserialize($res); $flds = get_document_fields((int)$_REQUEST['id'], $res); } //-- Собираем страницу $AVE_Core->coreSiteFetch(get_current_document_id()); Debug::startTime('CONTENT'); $content = ob_get_clean(); if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && (defined('GZIP_COMPRESSION') && GZIP_COMPRESSION)) ob_start('ob_gzhandler'); else ob_start(); Debug::$_document_content = $content; Debug::startTime('EVALCONTENT'); eval (' '.'?>' . $content . ' @$GLOBALS['page_id'][$_REQUEST['id']]['page'])) ) OR ( isset($_REQUEST['apage']) && is_numeric($_REQUEST['apage']) && ($_REQUEST['apage'] < 2 OR ($_REQUEST['apage'] > @$GLOBALS['page_id'][$_REQUEST['id']]['apage'])) ) OR ( isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage']) && ($_REQUEST['artpage'] < 2 OR ($_REQUEST['artpage'] > @$GLOBALS['page_id'][$_REQUEST['id']]['artpage'])) ) ) ) { if ($_REQUEST['id'] == 1) header ('Location:' . ABS_PATH); else header ('Location:' . ABS_PATH . $AVE_Core->curentdoc->document_alias . URL_SUFF); exit; } $GLOBALS['block_generate']['DOCUMENT']['CONTENT'] = Debug::endTime('CONTENT'); $GLOBALS['block_generate']['INIT']['CODEEND'] = Debug::endTime('CODEEND'); // --- ИНЖЕКТОР АССЕТОВ --- $process_assets = function($asset_array) { if (empty($asset_array) || !is_array($asset_array)) return ''; $clean_assets = []; foreach (array_unique($asset_array) as $item) { $item = trim($item); // Разрешаем только заголовочные теги if (!preg_match('/^<(script|link|style|meta|!--|title|base)/i', $item)) continue; // Удаляем любые on* атрибуты (onload, onerror и т.д.) if (preg_match('/on[a-z]+\s*=/i', $item)) continue; // DATA: Блокируем всё, кроме безопасных изображений if (stripos($item, 'data:') !== false && stripos($item, 'image/') === false) continue; $clean_assets[] = $item; } return implode("\n", $clean_assets); }; // Собираем данные из PHP-кода модулей $module_header = $process_assets($GLOBALS['user_header'] ?? []); $module_footer = $process_assets($GLOBALS['user_footer'] ?? []); // Вставка в HEADER if (!empty($module_header)) { if (strpos($render, '[tag:rubheader]') !== false) { $render = str_replace('[tag:rubheader]', $module_header . "\n[tag:rubheader]", $render); } else { $render = str_replace('', $module_header . "\n", $render); } } // Вставка в FOOTER if (!empty($module_footer)) { if (strpos($render, '[tag:rubfooter]') !== false) { $render = str_replace('[tag:rubfooter]', $module_footer . "\n[tag:rubfooter]", $render); } else { $render = str_replace('', $module_footer . "\n", $render); } } unset($module_header, $module_footer, $process_assets); // --- КОНЕЦ БЛОКА ИНЖЕКТОРА --- //-- Вывод конечного результата output_compress($render); $AVE_DB->Close();