缓冲区溢出代码中的标识

时间:2014-12-22 06:19:09

标签: c

以下代码是否容易受到缓冲区溢出攻击。请确定哪一行代码是错误的。请建议如何修复漏洞。

#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;
}

2 个答案:

答案 0 :(得分:2)

 1. while ((buffer[i++] = getchar()) != '\n')

您必须确保输入的字符数小于4096.否则您有缓冲区溢出。在阅读行结束时,最好使用更安全的fgets()

2. strcpy(newbuffer,buffer);

如果你的数组buffer被填满,那么你有一个缓冲区溢出,因为newbuffer不能保持4096.在这里使用一些更安全的函数来处理缓冲区溢出,如{{1 }}

答案 1 :(得分:0)

请改用strncpy()函数。 同样,while循环不应超过"缓冲区"

的长度