Перейти к содержимому

xml_set_external_entity_ref_handler()

Функция xml_set_external_entity_ref_handler() — это встроенная функция PHP, которая устанавливает пользовательский обратный вызов в качестве обработчика внешних ссылок на сущности в устаревшем SAX-парсере XML. Она полезна, когда необходимо перехватывать и обрабатывать внешние сущности, указанные в XML-документе, например, загружать внешние данные из базы данных или выполнять пользовательскую проверку.

Синтаксис

Синтаксис функции xml_set_external_entity_ref_handler() выглядит следующим образом:

Синтаксис функции xml_set_external_entity_ref_handler() в PHP

php
xml_set_external_entity_ref_handler($parser, $handler)

Где $parser — это парсер XML, для которого устанавливается обработчик, а $handler — имя пользовательской функции, которая будет обрабатывать внешние ссылки на сущности.

Примеры использования

Рассмотрим практический пример использования xml_set_external_entity_ref_handler() в PHP.

Пример: Установка функции-обработчика внешних ссылок на сущности

Предположим, у вас есть XML-документ, содержащий ссылки на внешние сущности, и вы хотите распарсить его с помощью устаревшего SAX-парсера в PHP. Вы можете использовать функцию xml_parser_create() для создания нового парсера XML, установить обработчик внешних ссылок на сущности с помощью xml_set_external_entity_ref_handler(), а затем распарсить данные:

Установка функции-обработчика внешних ссылок на сущности в PHP

php
function handle_external_entity_ref($parser, $open_entity_names, $base, $system_id, $public_id) {
    // Process the external entity reference
    echo "External entity found: $system_id\n";
}

$xml_parser = xml_parser_create();
xml_set_external_entity_ref_handler($xml_parser, "handle_external_entity_ref");

// Parse XML data (the handler is invoked when an external entity is encountered)
$xml_data = '<!DOCTYPE foo [<!ENTITY xxe SYSTEM "http://example.com/data">]><foo/>';
xml_parse($xml_parser, $xml_data);
xml_parser_free($xml_parser);

⚠️ Предупреждение о безопасности: Обработка внешних сущностей является распространённым вектором атак XML External Entity (XXE). Всегда проверяйте и ограничивайте ссылки на внешние сущности, избегайте загрузки локальных файлов и для приложений, чувствительных к безопасности, вместо устаревшего SAX-парсера рекомендуется использовать современные XML-библиотеки (например, DOMDocument с соответствующими флагами безопасности).

Заключение

В этой статье мы рассмотрели функцию PHP xml_set_external_entity_ref_handler() и способы её использования для установки обработчика внешних ссылок на сущности в устаревшем SAX-парсере XML. Мы объяснили её синтаксис и привели полный пример, демонстрирующий вызов обратного вызова во время парсинга. Используя эту функцию, вы можете перехватывать ссылки на внешние сущности и выполнять пользовательские действия, однако всегда следует проявлять осторожность, чтобы предотвратить уязвимости XXE.

Практика

Какая функция в PHP используется для создания внешней ссылки на сущность в XML-файлах?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.