2015-10-21 4 views
0

Я пытаюсь защитить от вредоносных инъекций XXE в XML-файлах, обработанных моим приложением. Поэтому я использую XDocument вместо XmlDocument.XDocument.Parse: Избегайте замены ссылок на XXE

XML представляет полезную нагрузку веб-запроса, поэтому я вызываю XDocument.Parse на его строковое содержимое. Тем не менее, я вижу ссылки XXE, содержащиеся в XML (& XXE), которые заменяются в результате фактическим значением ENTITY xxe.

Возможно ли разобрать XML с помощью XDocument без замены & xxe?

Благодаря

EDIT: мне удалось избежать замены xxes в XML с использованием XmlResolver=null для XDocument.Load

ответ

0

Вместо Parse попробовать использовать Load с предварительно настроенным читателем:

var xdoc = XDocument.Load(new XmlTextReader(
    new StringReader(xmlContent)) { EntityHandling = EntityHandling.ExpandCharEntities }); 

От MSDN:

Когда EntityHandling установлен в ExpandCharEntities, читатель расширяет символьные сущности и возвращает общие сущности в качестве узлов EntityReference.

+0

Я не хочу расширять сущности, это означало бы, что меня вводят. –

+0

Это расширит только объекты символов, такие как 'A', но сохраняет любые другие объекты, такие как '&XEE;'. По крайней мере, 'XmlReader' вернет' XmlNodeType.EntityReference' вместо текста. См. Примечания здесь: https://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.entityhandling%28v=vs.110%29.aspx – taffer

Смежные вопросы