Проверьте DTD и XXE в XML, используя цель c libxml2

<?xml version="1.0" ?>
<!DOCTYPE list [
<!ELEMENT list (bsinfo+)>
<!ELEMENT bsinfo (id,title,desc,books)>
]>

<list>
<bsinfo>

В моем проекте я хочу проверить, содержит ли XML DTD или нет. В настоящее время я использую анализатор Libxml для анализа XML.

В LibXML, как я могу проверить, содержит ли XML DTD.

При отправке запроса XML на сервер, как я могу предотвратить XXE атаку.

1 ответ

Когда вы говорите: "Я хочу проверить, содержит ли XML DTD", вы имеете в виду (а) "Я хочу использовать DTD, присутствующий в документе, если он есть, в противном случае я хочу использовать DTD в myfine.dtd"? или (b) "Независимо от того, что присутствует в экземпляре XML, я хочу проверить его на onetrue.dtd"?

В случае (a) один из способов проверить объявление типа документа - загрузить документ и применить соответствующее регулярное выражение для поиска строки '

В случае (b) вам не нужно проверять, содержит ли XML ссылку на DTD; вы просто указываете libxml выполнить проверку на onetrue.dtd, используя C API-эквивалент параметра xmllint --dtdvalid. И вы защищаете от недопустимых внешних или внутренних объектов, не имея декларации объектов в DTD для неприемлемых объектов.

Оба этих ответа предполагают, что когда вы спрашиваете "Когда я отправляю XML-запрос на сервер, как я могу предотвратить XXE-атаку", вы стремитесь защитить сервер, а не запросчик, от XXE-атаки. Я не знаю, как защитить запросчик, поскольку не понимаю, как можно использовать обработку сущностей для атаки на запросчик.

Другие вопросы по тегам