c - 保护程序免受缓冲区溢出的影响?

标签 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;
}

最佳答案

请引用: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)

关于c - 保护程序免受缓冲区溢出的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27006161/

相关文章:

c - 堆栈缓冲区溢出文章中的奇怪地址

c - 标准 ML 健全性证明?

c - 使用指针和数组时出现奇怪的结果

c - C 是否隐式且奇怪地将数组中的这个 char 转换为 int?

c - 跳进argv?

c - 缓冲区溢出攻击格式

security - 关于虚拟内存

c - 分配/未分配字符串的命名约定

c - 来自整数的指针,没有强制转换警告

c - 如何防止scanf导致C中的缓冲区溢出?