Я пишу веб-приложение, имеющее 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+ МБ. Есть ли что-то, чего мне все еще не хватает?