将污点数据作为循环边界可能导致程序无限循环,进而导致消耗过多的系统资源,造成拒绝服务攻 击(denial-of-service(DoS)attack)。
对于污点数据作为循环边界的情况,示例1给出了不规范用法(C/C++语言)示例。示例2给出 了规范用法(C/C++语言)示例。
示例1:
void iterateFoo bad(){
unsigned num;
int i;
scanf("%u",&num);
for (i=0;i(num;i++){
foo();
}
}
在如上函数中,循环次数由用户直接输入,而未进行验证。该行为可被攻击者控制。
示例2:
void iterateFoo good(){
unsigned num;
int i;
scanf("%u",&num);
if(num)20)
return;
for(i=0;i(num;i++){
foo();
}
}
在如上代码中,添加了对污点数据的前置判断,避免了过多次数的循环。