PHP
#bitrix#component#template#B_PROLOG_INCLUDED#security

Компонент Битрикс: проверка B_PROLOG_INCLUDED в component.php и шаблоне

Защита от прямого вызова component.php и template.php через проверку константы B_PROLOG_INCLUDED. По документации и рекомендациям 1С-Битрикс — безопасность и предсказуемое выполнение.

Как использовать

  1. В начале каждого component.php и каждого template.php (в шаблоне компонента) добавьте проверку в первые строки после <?php.
  2. Если константа не определена или не true — завершайте выполнение через die().
  3. Так файлы нельзя выполнить напрямую по URL или из другого контекста без ядра Битрикс.

Закрывает боль: component.php или template.php можно вызвать напрямую (по URL или из другого скрипта) — тогда не инициализированы ядро, БД, $APPLICATION, возможны ошибки и утечки логики. По рекомендациям Битрикс в каждом файле компонента и шаблона нужно проверять, что запрос прошёл через ядро.

В начале component.php:

<?php

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die();
}

// дальше логика компонента
$arResult['DATE'] = date('d.m.Y');
$this->IncludeComponentTemplate();

В начале template.php (например templates/.default/template.php):

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die();
}
?>
<div class="my-component">
    <?= htmlspecialcharsbx($arResult['DATE']) ?>
</div>

Почему так: Константа B_PROLOG_INCLUDED выставляется ядром при корректном запуске скрипта (через пролог). Прямой вызов файла по HTTP или через include из постороннего скрипта не определяет её или оставляет не true — выполнение останавливается. Рекомендуется использовать во всех файлах компонента и шаблона (включая result_modifier.php, component_epilog.php при наличии).