【问题标题】:node.js: Is it safe to use userinput as commandline arguments?node.js:使用用户输入作为命令行参数是否安全?
【发布时间】:2019-05-02 15:53:41
【问题描述】:

我想使用 child_process.execFile(file[, args][, options][, callback]) (node.js) 来调用主机服务器上的特定应用程序。 “文件”参数由我定义。将未经处理的用户输入传递给“args”参数是否安全?如果不是:如何清理输入?

【问题讨论】:

    标签: node.js shell express security command-line


    【解决方案1】:

    不,这绝对不安全。用户可以智能地结束命令并执行单独的命令,并且根据您的节点应用程序运行的权限级别,将能够做很多事情。

    我不确定您是如何检索用户输入的,但是,您应该解析输入以获取特定参数。例如,假设您想传递arg,您应该从用户输入中获取并传递child_process.execFile(file, arg, ...)

    您可能还应该清理用户输入,这可以通过多种方式完成,包括使用sanitize library。通过对输入进行参数化,清理起来相当简单,同时也限制了可以传入的内容。

    ================================================ ==============================

    更新:

    理论上,如果您需要允许用户传递任何东西,您可以在一些封闭的环境中开始操作,比如容器,尽管这相当复杂,并且取决于一个人想要多少搞砸你的系统,很有可能被pwned。

    【讨论】:

    • “用户可以智能地结束命令并执行单独的命令”。这将如何特别适用于child_process.execFile(),因为它不使用外壳?
    • 我想我的回答在这一点上可能是纯理论的,但根据经验,我的看法是,有志者事竟成。最好的办法是确保子进程在不会弄乱整个系统的环境中运行。
    • 如果你足够努力,你可以破解任何东西。我想知道的是:旨在传递“args”的函数是否始终作为参数而不是新命令? (当然,如果函数中没有错误)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2012-06-30
    • 2014-02-19
    • 2015-07-20
    • 2015-03-26
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多