xml_set_external_entity_ref_handler()
La función xml_set_external_entity_ref_handler() es una función integrada de PHP que establece una devolución de llamada definida por el usuario como controlador para las referencias de entidades externas en un analizador SAX XML heredado. Es útil cuando necesita interceptar y procesar entidades externas referenciadas en un documento XML, como cargar datos externos desde una base de datos o realizar una validación personalizada.
Sintaxis
La sintaxis de la función xml_set_external_entity_ref_handler() es la siguiente:
sintaxis de la función xml_set_external_entity_ref_handler() en PHP
xml_set_external_entity_ref_handler($parser, $handler)Donde $parser es el analizador XML en el que se establece el controlador, y $handler es el nombre de la función definida por el usuario que manejará las referencias de entidades externas.
Ejemplos de uso
Veamos un ejemplo práctico del uso de xml_set_external_entity_ref_handler() en PHP.
Ejemplo: configuración de una función controladora de referencias de entidades externas
Supongamos que tiene un documento XML que hace referencia a entidades externas y desea analizarlo utilizando el analizador SAX heredado en PHP. Puede usar la función xml_parser_create() para crear un nuevo analizador XML, configurar un controlador de referencias de entidades externas mediante xml_set_external_entity_ref_handler() y luego analizar los datos:
Configuración de una función controladora de referencias de entidades externas 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);⚠️ Advertencia de seguridad: El manejo de entidades externas es un vector común para ataques de Entidad Externa XML (XXE). Siempre valide y restrinja las referencias de entidades externas, evite cargar archivos locales y considere el uso de bibliotecas XML modernas (como
DOMDocumentcon las marcas de seguridad adecuadas) en lugar del analizador SAX heredado para aplicaciones sensibles a la seguridad.
Conclusión
En este artículo, hemos analizado la función xml_set_external_entity_ref_handler() de PHP y cómo se puede utilizar para establecer un controlador de referencias de entidades externas para un analizador SAX XML heredado. Hemos explicado su sintaxis y proporcionado un ejemplo completo que muestra cómo se invoca la devolución de llamada durante el análisis. Al utilizar esta función, puede interceptar referencias de entidades externas y realizar acciones personalizadas, aunque siempre debe tener precaución para prevenir vulnerabilidades XXE.
Práctica
¿Qué función de PHP se utiliza para crear una referencia de entidad externa para archivos XML?