当命令将用户输入作为其一些参数时,我使用 fork()/exec()/wait() 而不是 system(),因此用户不能输入类似...
&rm -rf /home/* && echo HAHA
...作为论据。
我假设 popen 和 system() 一样危险,因为它采用单个字符串而不是像 exec 函数系列那样的字符串列表。
虽然我只能从 exec 函数中获取返回值。是否有 popen 的“安全”版本,我可以使用用户输入运行并在父进程中处理 stdout/stderr?
最佳答案
安全的方法是自己设置必要的管道,直接使用 <a href="http://linux.die.net/man/2/pipe" rel="noreferrer noopener nofollow">pipe()</a>
直接调用。
这就是popen()
确实在幕后,但它也会调用 shell 来运行子进程。跳过该步骤应该会更安全。
关于c - popen() 的安全版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431950/