CakeFest 2024: The Official CakePHP Conference

libxml_set_external_entity_loader

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

libxml_set_external_entity_loaderÖntanımlı harici öğe yükleyiciyi değiştirir

Açıklama

libxml_set_external_entity_loader(?callable $geri_çağırım): bool

Öntanımlı harici öğe yükleyiciyi değiştirir. İlgili işlem için LIBXML_NOENT atanmış olsa bile, XXE saldırılarını önlemek için isteğe bağlı harici öğe yüklenmesini engellemekte kullanılabilir ve genellikle libxml_disable_entity_loader() çağrısına tercih edilir.

Bağımsız Değişkenler

geri_çağırım

Aşağıdaki sözdizimine sahip bir işlev olmalıdır:

çözümleyici(?string $genel, string $sistem, array $bağlam): resource|string|null
genel
DOCTYPE genel kimliği.
sistem
DOCTYPE sistem kimliği.
bağlam
"directory", "intSubName", "extSubURI" ve "extSubSystem" anahtarlı ilişkisel bir dizi.
Bu çağrılabilir, bir özkaynağın açılabileceği bir dize veya özkaynak döndürmelidir. null döndürülürse, öğe gönderim çözümlemesi başarısız olmuş demektir.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Örnekler

Örnek 1 - libxml_set_external_entity_loader() örneği

<?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());
?>

Yukarıdaki örneğin çıktısı:

string(10) "-//FOO/BAR"
string(25) "http://example.com/foobar"
array(4) {
    ["directory"]    => NULL
    ["intSubName"]   => NULL
    ["extSubURI"]    => NULL
    ["extSubSystem"] => NULL
}
bool(true)

Ayrıca Bakınız

add a note

User Contributed Notes

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