为什么在linux编程中使用system()很糟糕?

joh*_*han 2 c linux security

可能重复:
从C,C++在Linux中发出系统命令

我在一些文字上看到在linux编程中使用system()调用并不好,我想知道它的真正原因是什么?它应该消耗更多的内存,也许更多的CPU.除了这些可能是什么原因?

例如,如果我输入system("echo 1 > file");而不是使用fopen(), fwrite()黑客在我的程序/ linux系统中可以做什么?我看到system()因安全问题而不建议.但是一个人如何因为使用system()调用而破解linux系统呢?如果有人能够明确地解释使用system()可能会变坏的话,我会很高兴.

Ned*_*der 6

system("echo 1 > file");字面上使用不是安全风险,只是不必要的执行另一个您不需要的过程.

当您以编程方式构建字符串然后使用它时,会出现风险system().然后你有Shell命令注入的风险,你认为你正在构建一个命令,但恶意用户通过给你精心设计的输入来破坏你的程序,导致你的命令做你没想到的事情.

  • 即使是`system("echo 1> file")`**也可能存在安全风险,具体取决于它的运行方式.例如,如果`PATH`被设置为伪造的东西,`echo`可以是与标准echo命令不同的程序.即使没有,也有各种各样的环境变量可能影响shell和/或echo可能会做什么.这可能会导致您的程序行为异常,如果它是suid,它可能很容易导致权限升级.此外,没有好办法*检查在"文件"中存储"1"的失败*,并且不检查失败总是一个错误,并且通常存在安全风险. (4认同)