代码中的缓冲区溢出标识

独自的

以下代码是否容易受到缓冲区溢出攻击的影响。请确定错误的一行或几行代码。请提出如何解决此漏洞的建议。

#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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章