我的项目中有这些代码块():
val factory = (XMLInputFactory2) XMLInputFactory.newInstance();
val streamReader = (XMLStreamReader2) factory.createXMLStreamReader(inputStream);和
val factory = XMLInputFactory.newInstance();
val eventReader = factory.createXMLEventReader(new CharArrayReader(marshaledObject.toCharArray()));我用Sonarqube分析了我的代码(使用这个Docker映像设置:owasp/声呐)。
这两个代码块都被标记为违反规则Untrusted XML should be parsed with a local, static DTD的漏洞。
我把我的代码改为:
val factory = (XMLInputFactory2) XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
val streamReader = (XMLStreamReader2) factory.createXMLStreamReader(inputStream);和
val factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
factory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
val eventReader = factory.createXMLEventReader(new CharArrayReader(marshaledObject.toCharArray()));并分别进行了重质分析。这两个代码块仍然被标记为违反了上述规则。我不明白为什么。我应该为这些工厂增加一些财产吗?
我的项目是用Gradle 5.3.1构建的,并使用插件org.sonarqube版本2.6进行了分析。
发布于 2019-05-15 09:43:55
在Sonar分析中,这可能是假阳性的,根据不受信任的XML应该使用本地的静态DTD进行解析。规则示例,您的代码看起来完全正确。
确认eventReader不再易受攻击时,可能需要添加// NOSONAR以抑制假阳性。根据Sonar Docs 常见问题
假阳性且不会修复 您可以将个别问题标记为假阳性或不会通过through界面修复。如果您使用的是由Developer提供的短期分支和PR分析,则问题标记为假阳性或不会在合并后保留该状态。这是最好的办法。 //NOSONAR 大多数语言分析器支持使用通用机制: //NOSONAR在问题的末尾。这将抑制目前和将来可能提出的所有问题。
https://stackoverflow.com/questions/56145743
复制相似问题