c - popen() 的安全版本?

标签 c process fork subprocess pipe

当命令将用户输入作为其一些参数时,我使用 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/

相关文章:

c++ - 在 C C++ 中比较和匹配 word/excel 文件中的数字

c++ - 与 C 的指定初始化程序等效的 C++ 是什么?

linux -/proc/pid/maps的内容

linux - 如果 linux 中的任何 PID 超过某个限制,如何发出警报?

c - fork () : Number of child processes created

C 代码 - 没有足够的可用内存将数据从 txt 文件读取到用于 Debug模式的一维动态数组

c - 如何同时使用多个while循环?

windows - 如何终止运行时间超过 30 分钟的 Windows 进程

git - 您如何从 fork 的 github 存储库 merge 非主分支上的更改?

unix - dup2 和 fork 怎么一起用​​?