libxml_disable_entity_loader()
La fonction libxml_disable_entity_loader() de PHP servait à désactiver le chargement des entités externes dans les documents XML. Remarque : Cette fonction a été dépréciée dans PHP 8.0 et supprimée dans PHP 8.1. Les applications modernes devraient utiliser LIBXML_NONET ou configurer DOMDocument directement.
Qu'est-ce que la fonction libxml_disable_entity_loader() ?
La fonction libxml_disable_entity_loader() était un utilitaire intégré à PHP conçu pour bloquer la résolution des entités externes lors de l'analyse XML. Elle était principalement utilisée pour atténuer les attaques par entité externe XML (XXE), où les attaquants injectent des références d'entités malveillantes pour lire des fichiers sensibles du serveur, effectuer des attaques par falsification de requête côté serveur (SSRF) ou provoquer des dénis de service.
Comment utiliser la fonction libxml_disable_entity_loader()
La fonction accepte un seul paramètre booléen. Passer true désactive le chargement des entités externes, tandis que false (la valeur par défaut) l'active.
Voici un exemple d'utilisation héritée :
Utilisation héritée en 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.');
}
?>Dans cet exemple, nous appelons la fonction de manière conditionnelle pour désactiver la résolution des entités externes, puis nous chargeons le fichier XML avec une gestion d'erreur de base.
Depuis PHP 8.1, la méthode recommandée consiste à passer le drapeau LIBXML_NONET lors du chargement du XML :
<?php
$doc = new DOMDocument();
$doc->load('example.xml', LIBXML_NONET);
?>Conclusion
Bien que libxml_disable_entity_loader() ait autrefois été essentielle pour sécuriser les analyseurs XML contre les vulnérabilités XXE, elle n'est plus disponible dans les versions modernes de PHP. Les développeurs devraient migrer vers LIBXML_NONET ou configurer explicitement les options de DOMDocument pour maintenir un traitement XML sécurisé.
Pratique
What is the function of the libxml_disable_entity_loader() method in PHP?