Zum Inhalt springen

libxml_set_external_entity_loader()

Heute werden wir die Funktion libxml_set_external_entity_loader() in PHP besprechen. Diese Funktion registriert einen benutzerdefinierten Callback, um externe Entitäten in XML-Dokumenten zu verarbeiten, hauptsächlich um XML External Entity (XXE)-Angriffe zu verhindern.

Was ist die Funktion libxml_set_external_entity_loader()?

Die Funktion libxml_set_external_entity_loader() ist eine integrierte PHP-Funktion, die einen benutzerdefinierten Callback registriert, um das Laden externer Entitäten in XML-Dokumenten abzufangen. Seit PHP 5.1.0 verfügbar, wird sie hauptsächlich verwendet, um die XML-Parsing gegen XXE-Schwachstellen abzusichern. Beachten Sie, dass PHP 8.0.0 die Callback-Signatur aktualisiert hat, um Typenhinweise und einen Rückgabetyp einzufügen, was die Typsicherheit und Kompatibilität verbessert.

So verwenden Sie die Funktion libxml_set_external_entity_loader()

Die Verwendung der Funktion libxml_set_external_entity_loader() ist unkompliziert. Sie definieren einen Callback, der die öffentliche ID, die System-ID und den Kontext der Entität empfängt, und geben anschließend den Entitätsinhalt als String oder null zurück, um das Laden zu blockieren.

Hier ist ein Beispiel für die Verwendung der Funktion libxml_set_external_entity_loader():

So verwenden Sie die Funktion libxml_set_external_entity_loader() in PHP?

php
<?php
// Define a custom function to load external entities
function my_entity_loader(?string $publicId, ?string $systemId, ?array $context): ?string
{
  // Block loading if systemId is missing or invalid to prevent XXE/SSRF
  if ($systemId === null || !is_string($systemId)) {
    return null;
  }

  // Load the external entity safely
  $content = @file_get_contents($systemId);
  return $content !== false ? $content : null;
}

// Set the custom entity loader function
libxml_set_external_entity_loader('my_entity_loader');

// Load an XML file into a DOMDocument object
$doc = new DOMDocument();
$doc->load('example.xml');
?>

In diesem Beispiel definieren wir einen PHP 8-kompatiblen Callback, der die systemId validiert und die Entität sicher mit file_get_contents() abruft. Die Rückgabe von null weist libxml an, das Laden der Entität zu überspringen, was der Standardweg ist, um potenziell gefährliche externe Ressourcen zu blockieren. Anschließend registrieren wir den Callback mit libxml_set_external_entity_loader() und laden die XML-Datei.

Fazit

Die Funktion libxml_set_external_entity_loader() ist ein entscheidendes Werkzeug zur Absicherung des XML-Parsing in PHP. Durch das Abfangen von Anfragen an externe Entitäten können Entwickler XXE-Angriffe wirksam abschwächen und den Ressourcenzugriff steuern. Dieser Leitfaden behandelt den Zweck der Funktion, die Anforderungen an die PHP 8-Signatur und ein sicheres Implementierungsbeispiel.

Praxis

Was ist der Hauptzweck der PHP-Funktion libxml_set_external_entity_loader()?

Finden Sie das nützlich?

Dual-run-Vorschau — vergleichen Sie mit den Symfony-Routen live.