(PHP 5 >= 5.2.11, PHP 7, PHP 8)
libxml_disable_entity_loader — Отключает возможность загрузки сущностей из внешних источников
Начиная с PHP 8.0.0 функция УСТАРЕЛА. Полагаться на функцию настоятельно не рекомендуют.
Функция отключает или включает возможность загрузки внешних сущностей. Обратите внимание, что отключение загрузки внешних сущностей иногда вызывает общие проблемы с загрузкой XML-документов.
С libxml 2.9.0 подстановку сущностей отключили по умолчанию, поэтому не обязательно отключать загрузку внешних сущностей, если не требуется разрешать ссылки на внутренние сущности через константу LIBXML_NOENT, LIBXML_DTDVALID или LIBXML_DTDLOAD. Для подавления загрузки внешних сущностей часто лучше пользоваться функцией libxml_set_external_entity_loader() . С PHP 8.4.0 и библиотеки Libxml >= 2.13.0 доступна константа LIBXML_NO_XXE, которая тоже подавляет загрузку из внешних источников.
Функция возвращает предыдущее значение.
| Версия | Описание |
|---|---|
| 8.0.0 | Функция устарела. |
LIBXML_NOENT LIBXML_DTDVALID LIBXML_NO_XXE In PHP 8.0 and later, PHP uses libxml versions from 2.9.0, libxml_disable_entity_loader is deprecated.
so it is now safe to remove all `libxml_disable_entity_loader` calls on php8
if you want Backwards Compatibility
use this snippet
if (\PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(true);
}If is called
libxml_disable_entity_loader(true);
, it causes that new SoapClient(.) fails with
SOAP-ERROR: Parsing WSDL: Couldn't load from 'D:\path/dm_operations.wsdl' : failed to load external entity "D:\path/dm_operations.wsdl
because this wsdl imports a xsd as an another external file.
Tested on php 7.1.12, win x64.There is an extra \ should be deleted before PHP_VERSION_ID in the code which suconghou posted 2 years ago.
if (PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(true);
}Be mindful that this also disables url loading in simplexml_load_file() and likely other libxml based functions that deal with URLsUsing this function you can prevent a vulnerable to Local and Remote File Inclusion attacks.
You'll see it in an example where I load and validate the following string:
<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>
One way to prevent that the file in given back is to set this value to 0.
Please take a closer look at the release of symfony 2.0.11This also seems to have an impact on <xsl:import /> statements if this is applied when loading XSLT for the XSLTProcessor class.