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

3

当我对char[]执行strcpy操作时:

char buf[100];

strcpy(buf[], largeInput);

如果largeInput的长度超过100字节,我们将会发生缓冲区溢出。
但是我有一个问题,如果buf不是一个char[]而是一个char指针,是否也会发生缓冲区溢出呢?
我认为,如果largeInput足够长,在复制到char *buf时,它可能会到达另一个变量的内存区域。然而我不确定这是否是一种漏洞。
我使用了flawfinder并且它指控此类代码存在缓冲区溢出漏洞。
char *buf;

strcpy(buf, largeInput);

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


复制字符串:strcpy(buf[],largeInput); - Sourav Ghosh
@SouravGhosh 这只是一个例子,代码不仅仅是这样。largeInput是一些用户输入。 - BVCGAAV
2个回答

2
如果我们只看这段代码
char *buf;
strcpy(buf, largeInput);

由于您正在尝试写入未初始化的指针,因此它是未定义行为undefined behavior

即使您以前已将内存分配给buf,并且largeInput的内容超过了buf中分配的空间,则也是UB。没有任何方法可以自动调整buf

但是,供参考,您始终可以使用strdup()来更加安全。


代码不仅仅是这样,我只是放了我感兴趣的部分。假设指针已经初始化,largeInput 是程序提供的一些大输入 :) - BVCGAAV

2

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接