libxml_disable_entity_loader()
Функция libxml_disable_entity_loader() в PHP использовалась для отключения загрузки внешних сущностей в XML-документах. Примечание: Эта функция была помечена как устаревшая в PHP 8.0 и удалена в PHP 8.1. В современных приложениях следует использовать LIBXML_NONET или настраивать DOMDocument напрямую.
Что представляет собой функция libxml_disable_entity_loader()?
Функция libxml_disable_entity_loader() была встроенной утилитой PHP, предназначенной для блокировки разрешения внешних сущностей во время парсинга XML. Она в основном использовалась для предотвращения атак XML External Entity (XXE), при которых злоумышленники внедряют вредоносные ссылки на сущности для чтения конфиденциальных файлов сервера, выполнения подделки серверных запросов (SSRF) или создания условий отказа в обслуживании.
Как использовать функцию libxml_disable_entity_loader()
Функция принимает один логический параметр. Передача true отключает загрузку внешних сущностей, тогда как false (по умолчанию) включает её.
Ниже приведен пример устаревшего использования:
Устаревшее использование в PHP
<?php
// Disable external entities (Deprecated in PHP 8.0, removed in 8.1)
if (function_exists('libxml_disable_entity_loader')) {
libxml_disable_entity_loader(true);
}
// Load an XML file into a DOMDocument object
$doc = new DOMDocument();
if (!$doc->load('example.xml')) {
die('Failed to load XML file.');
}
?>В этом примере мы условно вызываем функцию для отключения разрешения внешних сущностей, а затем загружаем XML-файл с базовой обработкой ошибок.
Начиная с PHP 8.1 рекомендуемым подходом является передача флага LIBXML_NONET при загрузке XML:
<?php
$doc = new DOMDocument();
$doc->load('example.xml', LIBXML_NONET);
?>Заключение
Хотя libxml_disable_entity_loader() ранее была необходима для защиты парсеров XML от уязвимостей XXE, в современных версиях PHP она больше не доступна. Разработчикам следует перейти на использование LIBXML_NONET или явно настраивать параметры DOMDocument для обеспечения безопасной обработки XML.
Практика
Какова функция метода libxml_disable_entity_loader() в PHP?