【问题标题】:Safe version of popen()?popen() 的安全版本?
【发布时间】:2012-05-13 00:02:33
【问题描述】:

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

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

...作为参数。

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

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

【问题讨论】:

    标签: c process fork subprocess pipe


    【解决方案1】:

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

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

    【讨论】:

    • +1 是的,看一下popen的源代码(例如这里:cse.lehigh.edu/~brian/course/2011/cunix/notes/ch11/popen.c
    • @Adriano,很好......谢谢。你也太放松了。看起来 popen 已经使用了 execl;我可能只是复制它,但将参数作为空终止的 va_list 或 char* [] 传递并调用 execv 而不是 execl。
    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多