[英]Is system() call in C program safe?
我想在我的 C 程序中使用 linux 命令。 我知道,我们可以使用 system() 调用通过生成它来执行命令。 system() 调用是否安全? 当我反汇编我的 C 程序的 exe 时,我可以看到我在我的程序中使用的命令:(
[编辑] 下面是我的程序的示例,图像中有一个“echo hello”命令。
arul@OA2:~/work/images/samples$ cat a.c
#include <stdio.h>
int main()
{
printf("hai\n");
system("echo hello\n");
return 0;
}
arul@OA2:~/work/images/samples$ gcc a.c -o a
arul@OA2:~/work/images/samples$ ./a
hai
hello
使用 system() 函数可能会导致可利用的漏洞,在最坏的情况下允许执行任意系统命令。 调用 system() 具有高风险的情况包括:
传递来自受污染源的未清理或清理不当的命令字符串时
如果指定的命令没有路径名,并且攻击者可以访问命令处理器路径名解析机制
如果指定了可执行文件的相对路径并且攻击者可以控制当前工作目录
如果指定的可执行程序可以被攻击者欺骗
这取决于你所说的安全是什么意思。 它会神奇地在您的计算机上放置病毒吗? 否。这是否意味着您必须采取特殊预防措施来防止恶意行为? 是的。 这通常是个好主意吗? 并不真地。 它会混淆您使用的命令,以便在反汇编 exe 时看不到它们吗? 不。
在某些情况下,这可能并不危险,但我认为最佳做法是使用满足您需要的库或函数,例如execve()
。
(附录)
如果您的意思是安全,因为 in 不会显示数据中的字符串,那么这不是您想要的方式。 但是,如果您的应用程序需要以这种方式确保安全,那么您确实应该使用适当的函数, system()
似乎是让事情快速而肮脏地完成的最后手段。
System() 很容易受到攻击,因为使用的命令可以被替换。 为了避免它,我们可以使用库函数,如fork execl, execv, execle, execve, execlp, execvp
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.