PHP 8.4.0 RC4 available for testing

libxml_disable_entity_loader

(PHP 5 >= 5.2.11, PHP 7, PHP 8)

libxml_disable_entity_loaderDésactive le chargement des entités externes

Avertissement

Cette fonction est OBSOLÈTE à partir de PHP 8.0.0. Dépendre de cette fonction est fortement déconseillé.

Description

libxml_disable_entity_loader(bool $disable = true): bool

Active ou désactive le chargement des entités externes. Il est à noter que désactiver le chargement d'entités externes peut causer des problèmes lors du chargement de documents XML.

À partir de libxml 2.9.0, la substitution d'entités est désactivé par défaut, ainsi il n'est pas nécessaire de désactiver le chargement des entités externes, sauf s'il y a le besoin de résoudre les références d'entités internes avec LIBXML_NOENT, LIBXML_DTDVALID, ou LIBXML_DTDLOAD. Généralement, il est préférable d'utiliser libxml_set_external_entity_loader() pour réprimer le chargement d'entités externes. La constante LIBXML_NO_XXE peut également être utilisée pour empêcher cela (disponible uniquement dans Libxml >= 2.13.0, à partir de PHP 8.4.0).

Liste de paramètres

disable

Désactive (true) ou active (false) le chargement des entités externes par les extensions libxml (telles que DOM, XMLWriter et XMLReader).

Valeurs de retour

Retourne la configuration précédente.

Voir aussi

add a note

User Contributed Notes 6 notes

up
8
suconghou at gmail dot com
3 years ago
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);
}
up
8
vavra at 602 dot cz
6 years ago
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.
up
0
editor at geekkb.com
1 year ago
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);
}
up
0
phofstetter at sensational dot ch
10 years ago
Be mindful that this also disables url loading in simplexml_load_file() and likely other libxml based functions that deal with URLs
up
0
simonsimcity
12 years ago
Using 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.11
up
-3
brendan at bloodbone dot ws
10 years ago
This also seems to have an impact on <xsl:import /> statements if this is applied when loading XSLT for the XSLTProcessor class.
To Top