对于以下提到的代码,我在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);


可以请一些帮助我,如何正确清洁以上行。

最佳答案

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

int dataIDasNumber = Integer.parseInt(dataID);


并像int / long这样使用它:

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


然后,您不需要这样做:

Pattern.matches...


并且您的checkmarx违规行为应该消失。

09-26 18:07