Java项目中的信任边界冲突漏洞

Posted

技术标签:

【中文标题】Java项目中的信任边界冲突漏洞【英文标题】:Trust Boundary Violation flaw in Java project 【发布时间】:2019-01-09 09:04:14 【问题描述】:

对于下面提到的代码,我在 CheckMarx 报告中发现了信任边界违规。

错误描述 - 方法“getResponse”从元素请求中获取用户输入。此元素的值在未经过适当清理或验证的情况下流经代码,最终以“parseRequest”方法存储在服务器端 Session 对象中。**

代码 -

@Context
HttpHeaders httpHeader;

void parseRequest(SomeRequestType inputRequest) 
    HashMap<String, Data> requestData = inputRequest.getRequestData(httpHeader);
    if (requestData != null) 
        if (Strings.isNullOrEmpty(inputRequest.getId())) 
            Data data = requestData.get("data");
            var dataID = data.getID();
            if ((dataID != null) && Pattern.matches("[0-9]+", dataID)) 
                inputRequest.setId(dataID);
                ThreadContext.put("ID", dataID);
            
        
    

由于没有经过适当的清理或验证,我在下一行得到了 checkmarx 漏洞

ThreadContext.put("ID", dataID);

请帮助我,如何正确清理上述行。

【问题讨论】:

我们可以在 'requestData' 或 'data' 字段上使用 ESAPI.validator().getValidInput(....) 吗? 我可以在帖子中添加更多信息以更好地理解并使其更具响应性吗? 【参考方案1】:

如果您确定 dataID 是一个数字,请立即将其转换为整数/长整数,如下所示:

int dataIDasNumber = Integer.parseInt(dataID);

在这里像 int/long 一样使用它:

inputRequest.setId(dataIDasNumber);
ThreadContext.put("ID", dataIDasNumber);

那么你就不需要这样做了:

Pattern.matches...

你的 checkmarx 违规应该消失了。

【讨论】:

以上是关于Java项目中的信任边界冲突漏洞的主要内容,如果未能解决你的问题,请参考以下文章

java maven项目中的库版本冲突

java csrf漏洞修改不修改页面

.NET 程序测试 Java 项目 log4j2 是否存在远程代码执行漏洞

.NET 程序测试 Java 项目 log4j2 是否存在远程代码执行漏洞

项目管理中经常会遇到哪些问题?

java中的maven是干啥的?