libxml_disable_entity_loader()
La función libxml_disable_entity_loader() en PHP se utilizaba para deshabilitar la carga de entidades externas en documentos XML. Nota: Esta función fue marcada como obsoleta en PHP 8.0 y eliminada en PHP 8.1. Las aplicaciones modernas deben usar LIBXML_NONET o configurar DOMDocument directamente.
¿Qué es la función libxml_disable_entity_loader()?
La función libxml_disable_entity_loader() era una utilidad integrada de PHP diseñada para bloquear la resolución de entidades externas durante el análisis de XML. Se utilizaba principalmente para mitigar ataques de Entidades Externas XML (XXE), donde los atacantes inyectan referencias de entidades maliciosas para leer archivos sensibles del servidor, realizar falsificación de solicitudes del lado del servidor (SSRF) o causar condiciones de denegación de servicio.
Cómo usar la función libxml_disable_entity_loader()
La función acepta un único parámetro booleano. Pasar true deshabilita la carga de entidades externas, mientras que false (el valor predeterminado) la habilita.
A continuación se muestra un ejemplo de su uso heredado:
Uso heredado 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.');
}
?>En este ejemplo, llamamos condicionalmente a la función para deshabilitar la resolución de entidades externas y luego cargamos el archivo XML con un manejo básico de errores.
Desde PHP 8.1, el enfoque recomendado es pasar la bandera LIBXML_NONET al cargar XML:
<?php
$doc = new DOMDocument();
$doc->load('example.xml', LIBXML_NONET);
?>Conclusión
Aunque libxml_disable_entity_loader() fue en su momento esencial para proteger los analizadores XML contra vulnerabilidades XXE, ya no está disponible en las versiones modernas de PHP. Los desarrolladores deben migrar a LIBXML_NONET o configurar explícitamente las opciones de DOMDocument para mantener un procesamiento seguro de XML.
Práctica
¿Cuál es la función del método libxml_disable_entity_loader() en PHP?