gpt4 book ai didi

c - 在 C 中使用系统命令之前如何清理输入

转载 作者:行者123 更新时间:2023-11-30 17:51:41 25 4
gpt4 key购买 nike

这是我在 C: 中的代码

snprintf(buffer, 1023, "ls -%s", argv[1]);
system(buffer);

如何清理缓冲区,以便没有人可以运行除给定命令之外的恶意命令?

最佳答案

不幸的是,这是一个非常大的主题,不可能在一个问题中涵盖。幸运的是有a phenomenal book out there about Secure Coding in C and C++ 。那本书被用作我公司安全编码类的“教科书”,非常好。

有数十种不同的方法来清理输入,选择最好的一种方法几乎完全取决于输入的来源以及如何使用它。在将其传递给 system() 的地方,您需要深入研究,并且确实应该让安全工程师审查您的设计。原因是 ls 二进制文件中可能存在仅使用标准字符即可触发的可利用漏洞,或者可能存在您不知道的缓冲区溢出漏洞等。

专门针对您的场景,并且仅寻找最简单的攻击,如果您递归地删除所有; && || $ ( ),你击败了我能轻松想到的大多数攻击。请注意,这并没有阻止对您将输入作为参数传递到的二进制文件(在本例中为 ls)的利用,而是仅防止常见的 shell 字符,这些字符采用具有特殊含义并允许执行任意命令。

关于c - 在 C 中使用系统命令之前如何清理输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573391/

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