1

对于下面提到的代码,我在CheckMarx 报告中得到了 Trust Boundary Violation 。

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

代码 -

@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);

有人可以帮助我,如何正确清理上述行。

4

1 回答 1

2

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

int dataIDasNumber = Integer.parseInt(dataID);

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

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

然后你不需要这样做:

Pattern.matches...

你的 checkmarx 违规应该消失。

于 2018-08-20T15:46:30.123 回答