我正在尝试保护 .NET Web 服务免受XXE攻击。因为底层的 SOAP 消息是 XML,它有潜在的风险。
可以在此处和此处找到一种禁止对 XML 文档进行 DTD 处理的方法。但是,SOAP 消息的 XML 解析是由框架完成的。
如何修改 XML 阅读器的设置以关闭 DTD 处理?
我还寻找了一个直接访问 XML 内容的钩子,但在WebService的文档中没有找到合适的东西。
我做了一些测试,表明 ASP.NET Web 服务可以防止 XXE 攻击。默认情况下,该框架似乎关闭了 DTD 处理。
我使用Soap UI进行测试。只需添加一个 DOCTYPE 定义,例如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
<!ENTITY laugh "hahahahaha">
]>
导致错误的请求错误(HTTP 状态 400)。
为了确保不只是弄乱了 SOAP 消息,我还单独验证了 XML 内容。