保护程序免受缓冲区溢出?

时间:2014-11-18 23:28:32

标签: c buffer-overflow

我有一个易受缓冲区溢出影响的小程序。例如,数组限制为8个字符,但我仍然可以更多。我意识到gets()是易受攻击的,所以我打算使用fgets()。这个函数,我得到了分段错误。

此外,欢迎其他建议。

谢谢

#include <string.h>

int main(int argc, char *argv[]){   
int valid = 0;    
char str1[8];    
char str2[8];
printf ("Enter value for str1: ") ;

fgets(str1, sizeof(str1), stdin);  

printf ("Enter value for str2: ") ;

fgets(str2, sizeof(str2), stdin);

if (strncmp (str1, str2, 8) == 0)  
{       valid = 1;
}
printf("buffer: str1(%s), str2(%s), valid(%d)\n", str1, str2, valid);   
return 0;
}

1 个答案:

答案 0 :(得分:2)

请参考:Why is the gets function so dangerous that it should not be used?我们了解到您表示您已经知道gets在C中使用是易受攻击的关键字,但您仍然提供了使用gets的代码......

当尝试获取或存储字符串时,最好使用fgets,因为格式遵循空格缓冲区来读取用户的字符串或字符:char *fgets(char *str, int n, FILE *stream)