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) 下面的代码

我在阅读C中字符串中的漏洞时,偶然发现了这段代码。谁能给我一个解释,为什么这是脆弱的?提前谢谢

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
调用是不安全的。