system()在C程序中调用是否安全?

时间:2017-04-04 03:22:32

标签: c linux

我想在我的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

 Look at the below image which contains my commands <code>system()</code> call

4 个答案:

答案 0 :(得分:4)

www.securecoding.cert.org参考说:

  

使用system()函数可能会导致   可剥削的漏洞,在最坏的情况下允许执行   任意系统命令。调用system()的情况   高风险包括以下内容:

     
      
  • 传递未经过清理或未正确清理的命令字符串时   来源于受污染的来源

  •   
  • 如果指定的命令没有路径名和命令   攻击者可以访问处理器路径名称解析机制

  •   
  • 如果指定了可执行文件的相对路径并控制   攻击者可以访问当前工作目录

  •   
  • 如果攻击者可以欺骗指定的可执行程序

  •   

答案 1 :(得分:1)

这取决于你的安全意味着什么。它会在您的计算机上神奇地传播病毒吗?不是。这是否意味着您必须采取特殊预防措施来防止恶意行为?是。这通常是个好主意吗?并不是的。它是否会混淆您使用的命令,因此在解压缩exe时您无法看到它们?否。

答案 2 :(得分:0)

在某些情况下,它可能并不危险,但我认为最佳做法是使用满足您需要的库或函数,例如execve()

(齿顶)

如果您的意思是安全,因为不会在数据中显示字符串,那么这不是您想要的方式。 但是如果你的应用程序需要以这种方式保证安全,那么你真的应该使用正确的函数,system()似乎是最后的办法,只是让事情变得快而脏。

答案 3 :(得分:0)

System()易受攻击,因为可以替换使用的命令。为避免这种情况,我们可以使用fork execl, execv, execle, execve, execlp, execvp等库函数。