微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环条件的未检查输入

如何解决循环条件的未检查输入

我在我的代码中的以下几行收到了未经检查的循环条件输入。

String FirstName= request.getParameter("FirstName") !=null ?request.getParameter("FirstName"):"";

我提供了以下解决方案,但 checkmarx 扫描仍然显示相同的错误

if(!FirstName.equals("")){
FirstName=ESAPI.validator().getValidInput("requestParameter",FirstName,"HTTPParameterValue",2000,true);
}

我也使用过 getValidinteger() 方法,但两者似乎都没有解决问题。

这里是for循环--

ArrayList<String> userDetails = UserData.getDetails(FirstName);

for(int i=0;i<=userDetails.size();i++){
   String rollno=userDetails.get(0)!=null?userDetails.get(0):"";
   String subject=userDetails.get(1)!=null?userDetails.get(1):"";
}

解决方法

虽然 userDetails.size 似乎不是恶意用户可以控制或影响的东西(查看 UserData.getDetails 只会提供修复项目集),验证 userDetails.size 是否存在任何潜在风险,即大小可能会无意中增加到非常大的数字,从而导致拒绝服务,这仍然是一个好主意。

所以不是验证名字,而是检查数组列表的大小

static final int MAXSIZE = 2000;
int arraySize = userDetails.size(); 
if (arraySize > MAXSIZE) { // todo  }

for(int i=0;arraySize;i<=i++){
   String rollno=userDetails.get(0)!=null?userDetails.get(0):"";
   String subject=userDetails.get(1)!=null?userDetails.get(1):"";
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。