c - 如何将文件重定向到 C 中的 gets()

标签 c

我正在使用 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/

上一篇:C:最小和最大输出

下一篇:c - 结构行为

相关文章:

c - 使用结构在C中解析数据包

c - 结构中零长度数组的目的是什么?

c++ - C++中如何使用栈

java - 在 Java 中加密一个字符串,以便 C 程序可以解密它,而解密文本中没有任何填充?

c - 将多个值分配给单个变量(不是数组)的行为是什么?

c - 如何用0结束循环?

c - pthread 程序的臭名昭著的行为

c - Alphasort 的功能

c - AVR C : Serial Communication Clear Screen

c - malloc/calloc 分配的 block 的差异