对于下面提到的代码,我在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是一个数字,请立即将其转换为integer/long,如下所示:
int dataIDasNumber = Integer.parseInt(dataID);
在这里像int/long一样使用:
inputRequest.setId(dataIDasNumber);
ThreadContext.put("ID", dataIDasNumber);
那么你不需要这样做:
Pattern.matches...
你违反checkmarx的行为应该消失。