1

我正在努力解决 CheckMarx 漏洞之一。我需要一些指导来支持这一点。下面是我的代码:

try(Bufferedreader in = new BufferedReader(new InputStreamReader(con.getInputStream()))){
    String content = null;
    while((content = in.readLine()) != null) {
        // Logic to Parse JSON data and use it.
    }     
}

这里con(HttpurlConnection) new URL("some url").openConnection()

因此,checkmarx 在in.readLine()突出显示问题。

我试过的解决方法:

1:StringEscapeUtils.unescapeJson(in.readLine()),它没有帮助。

2:通过在谷歌某处阅读,使用in.lines().collect(Collectors.joining())代替in.readline()它帮助解决了这个问题,但在con.getInputStream()引入了一个新的(相同的漏洞)。

请帮助解决此问题。提前致谢。

4

1 回答 1

1

从技术上讲,它应该是 StringEscapeUtils.escapeJson(in.readLine()) 而不是 StringEscapeUtils.unescapeJson(in.readLine())。目的是输出编码以防止 XSS,而不是相反。

try(Bufferedreader in = new BufferedReader(new InputStreamReader(con.getInputStream()))){
    String content = null;
    while((content = StringEscapeUtils.escapeJson(in.readLine())) != null) {
        // Logic to Parse JSON data and use it.
    }     
}

不过,我认为 Checkmarx 不会将其识别为消毒剂,我只能看到它仅在 StringEscapeUtils 下查找 escapeXml、escapeHtml、escapeHtml3、escapeHtml4 方法。

与您的安全团队合作更新 Checkmarx 查询以包含 escapeJson,或者您可以使用 Checkmarx 识别的替代方法,例如替换恶意标签 <,>,</,/> 的替换方法,但这不是一个完整的证明解决方案被认为是一个健壮的安全代码

于 2021-04-08T03:58:48.557 回答