char[ ] 和 char * 存在缓冲区溢出漏洞

Buffer overflow vulnerabilities with char[ ] and char *

当我对 char[] 执行 strcpy 时:

char buf[100];

strcpy(buf[], largeInput);

如果 largeInput 的长度超过 100 个字节,我们就会发生缓冲区溢出。

但是我有一个问题,如果 buf 不是 char[] 而是 char 指针,是否也会出现缓冲区溢出?

我想,如果largeInput足够长,当复制到char *buf时,它可能会到达另一个变量的内存区域。但是我不确定这是一个漏洞。

我用了 flawfinder,它指责这样的代码是缓冲区溢出漏洞

char *buf;

strcpy(buf, largeInput);

我只是不确定这是不是误报。

如果我们看到只是这部分代码

char *buf;
strcpy(buf, largeInput);

它是 undefined behavior 因为,您正在尝试写入单元化指针。

即使你之前给buf分配了内存,largeInput的内容比buf中分配的space的内容多,那么,是的,也是UB。 buf 无法获得 自动调整

但是,FWIW,您始终可以使用 strdup() 以确保安全。

如果要支持任意大小的输入,请根据大小为 largeInput 分配内存。

char* largeInput = "very long string...";
char *buf = malloc(strlen(largeInput) + 1);
strcpy(buf, largeInput);
/* do something with buf */
free(buf);