以下代码是否容易受到缓冲区溢出攻击。请确定哪一行代码是错误的。请建议如何修复漏洞。
#include stdio.h
void manipulate(char *buffer) {
char newbuffer[80];
strcpy(newbuffer,buffer);
}
int main() {
char ch,buffer[4096];
int i=0;
while ((buffer[i++] = getchar()) != '\n') {};
i=1;
manipulate(buffer);
i=2;
printf("The value of i is : %d\n",i);
return 0;
}
答案 0 :(得分:2)
1. while ((buffer[i++] = getchar()) != '\n')
您必须确保输入的字符数小于4096.否则您有缓冲区溢出。在阅读行结束时,最好使用更安全的fgets()
。
2. strcpy(newbuffer,buffer);
如果你的数组buffer
被填满,那么你有一个缓冲区溢出,因为newbuffer
不能保持4096.在这里使用一些更安全的函数来处理缓冲区溢出,如{{1 }}
答案 1 :(得分:0)
请改用strncpy()函数。 同样,while循环不应超过"缓冲区"
的长度