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项目中的信任边界冲突漏洞的主要内容,如果未能解决你的问题,请参考以下文章
.NET 程序测试 Java 项目 log4j2 是否存在远程代码执行漏洞