node.js - node.js:使用用户输入作为命令行参数是否安全?
问题描述
我想使用 child_process.execFile(file[, args][, options][, callback]) (node.js) 来调用主机服务器上的特定应用程序。“文件”参数由我定义。将未经处理的用户输入传递给“args”参数是否安全?如果不是:如何清理输入?
解决方案
不,这绝对不安全。用户可以智能地结束命令并执行单独的命令,并且根据您的节点应用程序运行的权限级别,将能够做很多事情。
我不确定您如何检索用户输入,但是,您应该解析输入以获取特定参数。例如,假设您想要传递arg
,您应该从用户输入中获取并传递child_process.execFile(file, arg, ...)
。
您可能还应该清理用户输入,这可以通过多种方式完成,包括使用清理库。通过对输入进行参数化,清理起来相当简单,同时也限制了可以传入的内容。
==================================================== ==========================
更新:
从理论上讲,如果您需要能够允许用户传递任何东西,您可以在一些封闭的环境中开始操作,比如可能是一个容器,尽管这相当复杂,并且取决于一个人想要多少你的系统,很有可能被pwned。
推荐阅读
- google-admob - org.gradle.api.artifacts.ResolveException:无法解析配置“:app:_debugCompile”的所有依赖项
- c# - 函数在应该返回 true 时返回 false
- jquery - 如何使用在另一个函数中声明的变量
- visual-studio-2017 - 使用 Visual Studio 2017 项目构建,但 _MSC_VER 显示 1900
- git - 用 --set-upstream 推动提交?
- go - googleapi: 错误 400: 数据集 myProject:myDataset 仍在使用中,resourceInUse
- mysql - HANDLER FOR NOT FOUND 是如何工作的,它的用途是什么?
- c++ - 访问父级及其父级
- c++ - getch() 的 Visual Studio 设置
- xcode - 尝试将资源中的 .xcassets 添加到 podspec 文件时出错