首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Veracode CWE id 611

Veracode CWE id 611
EN

Stack Overflow用户
提问于 2019-03-06 16:18:18
回答 3查看 2.2K关注 0票数 2

我有一段代码,其中存在对XML外部实体引用('XXE')攻击的不正确限制的veracode查找。

代码:

代码语言:javascript
复制
Transformer transformer = TransformerFactory.newInstance().newTransformer();
        StreamResult result = new StreamResult(new StringWriter());
        DOMSource source = new DOMSource(node);
        transformer.transform(source, result); //CWE ID 611, impacted line.

我用过

代码语言:javascript
复制
transformer.setOutputProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
transformer.setOutputProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

但没那么走运。

EN

回答 3

Stack Overflow用户

发布于 2019-03-07 18:00:24

已使用以下代码解决此问题:

代码语言:javascript
复制
        TransformerFactory transformer = TransformerFactory.newInstance();//.newTransformer();
        transformer.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
        transformer.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
        StreamResult result = new StreamResult(new StringWriter());
        DOMSource source = new DOMSource(node);
        transformer.newTransformer().transform(source, result);
票数 1
EN

Stack Overflow用户

发布于 2019-03-18 14:48:49

建议放置try-catch块。

代码语言:javascript
复制
try{
            transformer.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
            transformer.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

        } catch (IllegalArgumentException e) {
            //jaxp 1.5 feature not supported
        }
票数 0
EN

Stack Overflow用户

发布于 2019-06-18 06:41:39

请注意,对于在JDK5或更早版本上运行应用程序的任何人,您将无法获得这些XML常量:

代码语言:javascript
复制
transformer.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
transformer.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

相反,您必须使用受保护的文档构建器解析到文档,然后在转换器中使用DOM源。

代码语言:javascript
复制
private static void example(String xmlDocument, Result result) throws ParserConfigurationException, IOException, SAXException, TransformerException {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    db.setEntityResolver(new EntityResolver() {
        public InputSource resolveEntity(String s, String s1) throws SAXException, IOException {
            return new InputSource(new StringReader(""));
        }
    });
    Document doc = db.parse(new InputSource(new StringReader(xmlDocument)));

    DOMSource domSource = new DOMSource(doc);
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.transform(domSource, result);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55018443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档