PHP 7.4.24 Released!

libxml_set_external_entity_loader

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

libxml_set_external_entity_loaderChange le chargeur d'entités externes par défaut

Description

libxml_set_external_entity_loader(?callable $resolver_function): bool

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().

Liste de paramètres

resolver_function

Un callable avec la signature suivante :

resolver(string $public_id, string $system_id, array $context): resource|string|null
public_id
L'ID public.
system_id
L'ID système.
context
Un tableau contenant quatre éléments "directory", "intSubName", "extSubURI" et "extSubSystem".
Cette callable devrait retourner une ressource, une chaîne de caractères par laquelle une ressource peut être ouverte. Si null est retourné, la résolution de référence d'entité échouera.

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Exemples

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)

Voir aussi

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top