以下代码是否容易受到缓冲区溢出攻击的影响。请确定错误的一行或几行代码。请提出如何解决此漏洞的建议。
#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;
}
1. while ((buffer[i++] = getchar()) != '\n')
您必须确保输入的字符数少于4096。否则您将发生缓冲区溢出。在阅读直到该行的结尾时,最好使用fgets()
它更安全。
2. strcpy(newbuffer,buffer);
如果数组buffer
已满怎么办,那么缓冲区溢出,因为newbuffer
不能容纳4096。这里也可以使用一些更安全的函数来处理缓冲区溢出,例如snprintf()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句