C-为什么该程序不安全?

问题描述 投票:3回答:1

我有作业,应该分析这个C程序并回答三个问题。这是程序:

int main()
{
    // Define buffers to store username and password
    char username[16];
    char password[16];
    // Read username and password from user input
    printf("Enter your name: ");
    scanf("%s", username);
    printf("Enter your password: ");
    scanf("%s", password);
    printf("[SHOUTING OUT LOUD] Hello, %s!\n", username);
    return 0;
}

这些是问题:

  1. 有一个安全漏洞,可以将密码打印出来。这怎么可能?
  2. 如何实现程序崩溃?
  3. 更正程序,使其不再有安全漏洞。

我认为问题在于scanf方法,因为可以扫描的字符数没有限制。因此,我认为通过输入长字符串可能会导致分段错误,因为您要将字符保存在内存中,而用户不能引用这些字符。这将是我对2的答案。3的答案是可以通过限制可以扫描的字符数来更正程序。但我似乎找不到1的答案。您能帮我解决这个问题吗?

c memory operating-system
1个回答
1
投票

想象实现是否将用户名和密码连续存储在内存中。在输出密码之前,停止打印语句至关重要。但是,只有在用户名字段中遇到零字节时,它才会这样做。如果用户名太长,则用户名字段中将没有零字节,因此打印可以继续输出密码字段的内容。

© www.soinside.com 2019 - 2024. All rights reserved.