Veracode报CWE 611错误:按OWASP配置仍存XXE风险,遗漏何配置?
关于Veracode检测CWE 611(XXE)问题的排查与解决
我收到Veracode的CWE 611(XML外部实体引用不当限制)错误,标记了以下代码块:
public static <T> T toObject( JAXBContext jaxbContext, String xml ) throws JAXBException, XMLStreamException { XMLInputFactory xif = XMLInputFactory.newFactory(); xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); xif.setProperty(XMLInputFactory.SUPPORT_DTD, false); xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader( xml )); var unmarshaller = jaxbContext.createUnmarshaller(); return (T) unmarshaller.unmarshal(xsr); }这段代码看起来已经遵循了OWASP防止XXE攻击的指南,请问我遗漏了哪个需要设置的标志来防范XXE攻击?
你需要额外设置**XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES**属性为false,同时注意部分JAXB实现可能需要针对Unmarshaller额外配置安全参数:
- 添加
xif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);,该属性会阻止解析器替换实体引用,从根源上避免外部实体的解析风险。 - 针对JAXB的Unmarshaller,部分实现(如GlassFish的JAXB RI)需要显式禁用实体扩展,可以添加:
或者根据具体使用的JAXB实现设置对应的安全属性,确保Unmarshaller不会处理未被StAX解析器拦截的实体内容。unmarshaller.setProperty("com.sun.xml.bind.disableXmlSecurity", false);
另外,Veracode的静态分析对安全属性的检查较为严格,建议同时确认XMLInputFactory的实现类是否为安全的默认实现(如com.sun.xml.internal.stream.XMLInputFactoryImpl或Apache Xerces的实现),避免使用存在漏洞的第三方XML解析库。
内容的提问来源于stack exchange,提问作者Drew Stevens
相关产品推荐
相关产品推荐

