xml_set_external_entity_ref_handler()
La fonction xml_set_external_entity_ref_handler() est une fonction intégrée de PHP qui définit une fonction de rappel (callback) personnalisée comme gestionnaire des références d'entités externes dans un analyseur SAX XML hérité. Elle est utile lorsque vous devez intercepter et traiter des entités externes référencées dans un document XML, comme le chargement de données externes depuis une base de données ou l'exécution de validations personnalisées.
Syntaxe
La syntaxe de la fonction xml_set_external_entity_ref_handler() est la suivante :
Syntaxe de la fonction xml_set_external_entity_ref_handler() en PHP
xml_set_external_entity_ref_handler($parser, $handler)Où $parser est l'analyseur XML sur lequel le gestionnaire est défini, et $handler est le nom de la fonction définie par l'utilisateur qui traitera les références d'entités externes.
Exemples d'utilisation
Examinons un exemple pratique d'utilisation de xml_set_external_entity_ref_handler() en PHP.
Exemple : Définition d'une fonction de gestionnaire de références d'entités externes
Supposons que vous disposiez d'un document XML faisant référence à des entités externes et que vous souhaitiez l'analyser à l'aide de l'analyseur SAX hérité en PHP. Vous pouvez utiliser la fonction xml_parser_create() pour créer un nouvel analyseur XML, définir un gestionnaire de références d'entités externes à l'aide de xml_set_external_entity_ref_handler(), puis analyser les données :
Définition d'une fonction de gestionnaire de références d'entités externes en 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);⚠️ Avertissement de sécurité : La gestion des entités externes est un vecteur courant d'attaques par entité externe XML (XXE). Validez et restreignez toujours les références d'entités externes, évitez de charger des fichiers locaux, et envisagez d'utiliser des bibliothèques XML modernes (comme
DOMDocumentavec les indicateurs de sécurité appropriés) plutôt que l'analyseur SAX hérité pour les applications sensibles à la sécurité.
Conclusion
Dans cet article, nous avons présenté la fonction xml_set_external_entity_ref_handler() de PHP et son utilisation pour définir un gestionnaire de références d'entités externes sur un analyseur SAX XML hérité. Nous en avons expliqué la syntaxe et fourni un exemple complet illustrant l'appel de la fonction de rappel lors de l'analyse. Grâce à cette fonction, vous pouvez intercepter les références d'entités externes et exécuter des actions personnalisées, mais il est essentiel de faire preuve de prudence pour prévenir les vulnérabilités XXE.
Pratique
Quelle fonction de PHP est utilisée pour créer une référence d'entité externe pour les fichiers XML ?