当命令将用户输入作为其某些参数时,我使用fork()/ exec()/ wait()而不是system(),因此用户无法输入类似...
&rm -rf /home/* && echo HAHA
......作为一个论点。
我假设popen和system()一样危险,因为它需要一个字符串而不是像exec系列函数那样的字符串列表。
我只能从exec函数中获取返回值。是否有一个“安全”的popen版本,我可以使用用户输入运行并在父进程中处理stdout / stderr?
答案 0 :(得分:3)
安全的方法是自己设置必要的管道,直接使用pipe()
直接呼叫。
这就是popen()
在幕后所做的事情,但它也会调用shell来运行子进程。跳过这一步应该会使它更安全。