我正在使用 gets() 来读取密码。当我的程序正在等待密码并导致缓冲区溢出并最终做坏事时,是否存在有人重定向文件的风险?
有人告诉我这是可以做到的,但我无法将文件重定向为我的程序的输入。有人可以告诉我如何将文件重定向为密码吗?
#include <stdio.h>
#include <string.h>
int checkPassword(void)
{
char password[16];
bzero(password, 16);
printf("Enter password: ");
gets(password);
if (strcmp(password, "correctPassword")==0)
return 1;
return 0;
}
int main(void)
{
if (checkPassword()) {
printf("Correct password\n");
}
else {
printf("Access denied!\n");
}
}
最佳答案
利用 gets 函数可能导致缓冲区溢出。请改用 fgets 函数:
fgets(password, sizeof(password), stdin);
这种攻击的可行性取决于您使用的系统、是否启用了任何堆栈保护机制,以及 - 当然 - 攻击的复杂程度。
关于c - 如何将文件重定向到 C 中的 gets(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795725/