gpt4 book ai didi

c - 使用 printf/scanf 和 %s 的漏洞

转载 作者:行者123 更新时间:2023-11-30 19:55:14 25 4
gpt4 key购买 nike

为什么即使我尝试提供正确的输入,C 也会告诉我这是不安全的?

#include <stdio.h> 
#include <stdlib.h>

int main(void) {
char id[8];

printf("Your ID:");
scanf("%s", id);

printf("%s", id);

return 0;
}

我假设是因为它可能被利用?怎么会这样?

最佳答案

scanf() 不会对其输入内容设置任何限制,因此很容易溢出 id[] 缓冲区。

现代编译器可能会启用堆栈粉碎检测,因此如果您通过 gcc 进行编译而不设置 -fno-stack-protector 标志,程序将故意提前崩溃而不是带着如此讨厌的错误运行而不被注意到。

您最好使用 fgets() 然后使用 sscanf() 或其他一些机制来解析输入,这样您就可以保证丢弃额外的输入。

关于c - 使用 printf/scanf 和 %s 的漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com