Kra*_*ken 5 input exec sanitize child-process node.js
我正在使用node编写CLI,并且到达了接受用户输入并将其附加到作为child_process.exec函数命令的字符串的部分。
const CURL_CHILD = exec('npm view --json ' + process.argv[2] + ...
我试图弄清楚process.argv[2]将其传递给exec函数之前需要做什么。我已经浏览了一会儿,还没有发现任何针对此特定情况的问题或答案。
针对此特定用例,清理用户输入的最佳方法是什么?这里实际需要什么?
更新 我仍在尝试学习和回答自己的问题,并发现此链接建议我使用js-string-escape(节点程序包)。我真的很想使用本机/香草来做到这一点。节点是否为此有任何工具?
更新2
最后,我偶然发现了“命令注入”这个流行语,并发现了许多推荐使用child_process.execFileor 的文章child_process.spawn。我仍然很好奇是否有一种本机的方法来清理输入,同时仍然保护所创建的完整shell进程child_process.exec。我对此保持开放,希望有人能回答。
您的用户输入参数可能包含变量字符,shell 将以自己的方式解释它们。例如,在 Linux 中,$ 具有特殊含义。
如果您想按原样使用此类参数以避免 shell 解释,则必须转义它们。我们对 HTML 中的一些特殊字符执行同样的操作(例如 < 和 > 具有特殊含义,因此我们在 HTML 中使用<和 分别对它们进行转义>)。这同样适用于这里。
所以你的问题的答案是首先找出你的 shell/环境中的特殊字符并转义它们。
一个好的经验法则是转义双引号"、单引号'、空格、美元符号$(因为它是光明会符号,对吧?;-)、重音符号`和明显的反斜杠等字符\。
因此,我们假设您的命令如下。要逃避它,只需使用一些简单的正则表达式,如下所示:
cmd = "npm view --json " + process.argv[2];
escapedCmd = cmd.replace(/(["\s'$`\\])/g,'\\$1');
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助:-)
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |