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);
当我对 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);