PHP 8.4.2 Released!

libxml_set_external_entity_loader

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

libxml_set_external_entity_loaderИзменение загрузчика по умолчанию для внешних объектов

Описание

libxml_set_external_entity_loader(?callable $resolver_function): bool

Изменение загрузчика по умолчанию для внешних объектов. Можно использовать для подавления расширения произвольных внешних сущностей, чтобы избежать XXE-атак, даже если для соответствующей операции установлено значение LIBXML_NOENT. Обычно это лучше, чем вызов libxml_disable_entity_loader().

Список параметров

resolver_function

Callback-функция (callable) со следующей сигнатурой:

resolver(?string $public_id, string $system_id, array $context): resource|string|null
public_id
Публичный идентификатор.
system_id
Системный идентификатор.
context
Массив из четырёх элементов: "directory", "intSubName", "extSubURI" и "extSubSystem".
Эта callback-функция должна возвращать ресурс (resource) или строку (string) из которой можно открыть ресурс. Если возвращается null, разрешение ссылки на сущность завершится ошибкой.

Возвращаемые значения

Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.

Примеры

Пример #1 Пример использования 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());
?>

Результат выполнения приведённого примера:

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

Смотрите также

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top