我当前正在创建一个HTTP处理程序,以防止XXE攻击。
浏览了Internet上的其他文章之后,我发现设置 XMLResolver = null 可以防止XXE攻击,如果您的版本高于或等于4.5.2。在此版本以下,您需要手动添加此解析器。在版本4.5.2及更高版本中,默认情况下,此XmlResolver设置为null。
我遵循了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中缺少某些内容?此外,如果我使用解析器为null,则响应xml的外观如何。我当前的响应xml看起来不太好,我仍然面临着xxe攻击