Как я могу использовать различные XML-библиотеки PHP и #39;s, чтобы получить функциональность, подобную DOM -, и избежать DoS-уязвимостей, таких как Billion Laughs или Quadratic Blowup?

Я пишу веб-приложение, имеющее XML API на PHP, и меня беспокоят три конкретных уязвимости, все из которых связаны со встроенными определениями DOCTYPE :включением локальных файлов, квадратичным увеличением сущности и экспоненциальным увеличением сущности. Я хотел бы использовать встроенные библиотеки PHP (5.3 ), но я хочу убедиться, что я не восприимчив к ним.

Я обнаружил, что могу устранить LFI с помощью libxml _отключить _загрузчик сущностей _, но это не помогает со встроенными объявлениями ENTITY, включая сущности, которые ссылаются на другие сущности.

Библиотека SimpleXML (SimpleXMLElement, simplexml _load _string и т. д. )отлично подходит, потому что это парсер DOM, и все мои входные данные довольно малы; это позволяет мне использовать xpath и довольно легко манипулировать DOM. Я не могу понять, как остановить объявления ENTITY. (Я был бы рад отключить все встроенные определения DOCTYPE, если это возможно.)

Библиотека XML Parser (xml _парсер _create, xml _set _element _обработчик и т. д. )позволяет мне установить обработчик по умолчанию, который включает сущности, с xml _установить _обработчик по умолчанию _. Я могу взломать его так, чтобы для нераспознанных сущностей он просто возвращал исходную строку (, т.е. "&ent;" ). Однако эта библиотека разочаровывает :, потому что это парсер SAX. Мне приходится писать кучу обработчиков (целых 9.. ).

Так можно ли использовать встроенные библиотеки, получить DOM -как объекты и защитить себя от этих различных DoS-уязвимостей? спасибо

На этой странице описаны три уязвимости и предложено решение... если бы я только использовал.NET:http://msdn.microsoft.com/en-us/magazine/ee335713.aspx

ОБНОВЛЕНИЕ:



]>
&en;&en;&en;&en;&en;&en;&en;&en;&en;&en;&en;&en;.....
EOF;
$doc = new DOMDocument();
$doc->loadXML($s);
var_dump($d->lastChild->nodeValue);
?>

Я тоже пробовал loadXML($s, LIBXML_NOENT);. В обоих случаях я сбрасываю 300+ МБ. Есть ли что-то, чего мне все еще не хватает?

11
задан Marius Balčytis 9 March 2018 в 13:15
поделиться