popen()的安全版本?

时间:2012-05-03 13:02:12

标签: c process fork subprocess pipe

当命令将用户输入作为其某些参数时,我使用fork()/ exec()/ wait()而不是system(),因此用户无法输入类似...

&rm -rf /home/* && echo HAHA

......作为一个论点。

我假设popen和system()一样危险,因为它需要一个字符串而不是像exec系列函数那样的字符串列表。

我只能从exec函数中获取返回值。是否有一个“安全”的popen版本,我可以使用用户输入运行并在父进程中处理stdout / stderr?

1 个答案:

答案 0 :(得分:3)

安全的方法是自己设置必要的管道,直接使用pipe()直接呼叫。

这就是popen()在幕后所做的事情,但它也会调用shell来运行子进程。跳过这一步应该会使它更安全。