(PHP 5 >= 5.4.0, PHP 7, PHP 8)
libxml_set_external_entity_loader — Change le chargeur d'entités externes par défaut
Change le chargeur d'entités externes par défaut.
Ceci peut être utilisé pour réprimer l'expansion d'entités externes arbitraire
pour prévenir les attaques XXE, même si LIBXML_NOENT a
été définie pour l'opération respective, et ceci est généralement préférable
à appeler libxml_disable_entity_loader().
resolver_functionUn callable avec la signature suivante :
public_idsystem_idcontext"directory", "intSubName",
"extSubURI" et "extSubSystem".
null est retourné, la résolution de
référence d'entité échouera.
Exemple #1 Exemple avec libxml_set_external_entity_loader()
<?php
$xml = <<<XML
<!DOCTYPE foo PUBLIC "-//FOO/BAR" "http://example.com/foobar">
<foo>bar</foo>
XML;
$dtd = <<<DTD
<!ELEMENT foo (#PCDATA)>
DTD;
libxml_set_external_entity_loader(
function ($public, $system, $context) use($dtd) {
var_dump($public);
var_dump($system);
var_dump($context);
$f = fopen("php://temp", "r+");
fwrite($f, $dtd);
rewind($f);
return $f;
}
);
$dd = new DOMDocument;
$r = $dd->loadXML($xml);
var_dump($dd->validate());
?>L'exemple ci-dessus va afficher :
string(10) "-//FOO/BAR"
string(25) "http://example.com/foobar"
array(4) {
["directory"] => NULL
["intSubName"] => NULL
["extSubURI"] => NULL
["extSubSystem"] => NULL
}
bool(true)