popen() 的安全版本?

eri*_*ich 1 c fork subprocess pipe process

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

&rm -rf /home/* && echo HAHA
Run Code Online (Sandbox Code Playgroud)

...作为一个论点。

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

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

unw*_*ind 5

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

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