В настоящее время я создаю обработчик http, который предотвратит XXE-атаку.
Пройдя через другой пост, доступный в Интернете, я обнаружил, что установка XMLResolver = null предотвратит атаку XXE, если у вас версия выше или равна 4.5.2. Ниже этой версии вам нужно вручную добавить этот преобразователь. В версиях 4.5.2 и выше этот XmlResolver по умолчанию имеет значение null.
Я следовал нижеприведенному URL из OWASP:
https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#.NET
Однако после внесения изменений я все еще не понимаю, чего мне не хватает. Ниже мой запрос и ответ xml.
Запрос
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [
<!ELEMENT RfMessageEnvelope (TimeMs,TraceEvents)>
<!ELEMENT TimeMs (#PCDATA)>
<!ELEMENT TraceEvents (#PCDATA)>
<!ENTITY ent "Hello">
]>
<RfMessageEnvelope>
<TimeMs>-1</TimeMs>
<replace>&ent;</replace>
<TraceEvents></TraceEvents>
</RfMessageEnvelope>
OR
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/passwsd"> ]>
<RfMessageEnvelope>
<TimeMs>-1</TimeMs>
<Result>&ent;</Result>
<TraceEvents></TraceEvents>
</RfMessageEnvelope>
Ответ XML
<RfMessageEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TimeMs>-1</TimeMs>
<Result>Error</Result>
<TraceEvents>
<RfTraceTO>
<Application>KMWS</Application>
<Context/>
<Message>NullReferenceException: [1] Object reference not set to an instance of an object.</Message>
<Machine>ISP9916D</Machine>
<Code>15007</Code>
<Level>Error</Level>
</RfTraceTO>
</TraceEvents>
<Payload/>
<Assembly/>
<Type/>
<Pipeline/>
</RfMessageEnvelope>
Означает ли это, что внесенные мной изменения ( настройка XMLResolver = null ) работают некорректно. Или что-то отсутствует в моем запросе XML? Кроме того, как будет выглядеть мой ответ xml, если я использую решатель для нуля. мой текущий ответ не выглядит хорошо, и я все еще сталкиваюсь с атакой xxe