如何安全解析 SAML 元数据?

How to securely parse SAML metadata?

我正在做一个支持 SSO SAML 的项目 authorization/authentication。上次安全分析表明我们存在与 XML 外部实体注入攻击相关的安全漏洞。这是代码中有问题的部分:

InputStream is = new ByteArrayInputStream(metadata.getBytes());

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder docBuilder;
docBuilder = factory.newDocumentBuilder();
Document doc;
doc = docBuilder.parse(is);

我在 Internet 上搜索并找到了不同的解决方案,其中一些适用于一般 XML 文档解析。我还找到了解决方案,这些解决方案禁用了解析器的特定选项(例如扩展外部实体)。但我不知道这些解决方案是否适合我的情况。所以我的问题是:解析 SAML 元数据的最安全方法是什么?

谢谢, 拉菲克

我认为最好的方法是依靠一个知名的第三方维护软件作为OWASP的ESAPI库。这已经成为事实上的标准。 您可以使用专用的 ESAPI 工具对其进行验证,并过滤掉任何已知的恶意输入。这样操作之后,你就可以按照你的方式解析了。

This is the link to ESAPI