C.脆弱性
我在阅读C中字符串中的漏洞时,偶然发现了这段代码。谁能给我一个解释,为什么这是脆弱的?提前谢谢C.脆弱性,c,security,c-strings,C,Security,C Strings,我在阅读C中字符串中的漏洞时,偶然发现了这段代码。谁能给我一个解释,为什么这是脆弱的?提前谢谢 char buf[MAXSIZE]; if (strlen(str) > MAXSIZE) return; strcpy(buf, str); 此代码错误地检查了最大长度。C字符串在字符串的末尾有一个nul来标记字符串的结尾。strcpy()将复制它。为了适应此nul,测试必须: if (strlen(str) >= MAXSIZE) 下面的代码
char buf[MAXSIZE];
if (strlen(str) > MAXSIZE)
return;
strcpy(buf, str);
此代码错误地检查了最大长度。C字符串在字符串的末尾有一个nul来标记字符串的结尾。strcpy()将复制它。为了适应此nul,测试必须:
if (strlen(str) >= MAXSIZE)
下面的代码也不正确。
int i[10];
int j=0
while (j < 10000){
i[j] = 5;
++j;
}
while(j<10000){
i[j]=5;
++j;
}
此代码将覆盖数组i的10个整数之后的内存中的数据。这将创建一个未定义的行为,可能是崩溃,但可能是更微妙的…检查数组索引。
strcpy
复制strlen+1
字符。当strlen(str)=MAXSIZE时会发生什么?超出数组边界的写入是未定义的行为。查看您的while
循环。你认为j
总是介于0
和9
之间吗?如前所述,您的strcpy
调用是不安全的。