diff --git a/index.php b/index.php index 6625e1c..c8794ab 100644 --- a/index.php +++ b/index.php @@ -167,6 +167,53 @@ $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);