首页 > 解决方案 > C 漏洞

问题描述

我正在阅读 C 中字符串中的漏洞,然后我遇到了这段代码。谁能给我解释为什么这很脆弱?提前致谢。

标签: csecurityc-strings

解决方案


char buf[MAXSIZE];
if (strlen(str) > MAXSIZE)
    return;
strcpy(buf, str);                

此代码错误地检查最大长度。C 字符串在字符串末尾有一个 nul 来标记字符串的结尾。strcpy() 将复制它。为了适应这个 nul,测试必须是:

if (strlen(str) >= MAXSIZE)

下面的代码也是不正确的。诠释我[10];整数 j = 0;

while (j < 10000){
    i[j] = 5;                
    ++j;
}

此代码将覆盖数组 i 的 10 个整数之后的内存中的数据。这将创建一个未定义的行为,可能是崩溃,但可能更微妙......


推荐阅读