如何保护 .NET Web 服务免受 XXE 攻击?

How can I protect .NET Web Services against XXE exploits?

我正在尝试保护 .NET Web 服务免受 XXE 攻击。 因为底层 SOAP 消息是 XML,它可能存在风险。

可以找到禁止对 XML 文档进行 DTD 处理的方法 here and here。 但是,SOAP 消息的 XML 解析是由框架完成的。

如何修改 XML reader 的设置以关闭 DTD 处理?

我还寻找了一个可以直接访问 XML 内容的挂钩,但在 WebService 的文档中没有找到合适的内容。

我做了一些测试,表明 ASP.NET 网络服务 受到保护 免受 XXE 攻击。 该框架似乎默认关闭了 DTD 处理。

我用 Soap UI 进行测试。 只需添加一个 DOCTYPE 定义,如

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[ 
<!ENTITY laugh "hahahahaha">
]>

导致错误请求错误(HTTP 状态 400)。

为了确保我没有弄乱 SOAP 消息,我还验证了 XML 内容分开。