【发布时间】:2020-08-27 13:38:41
【问题描述】:
小例子,从 REST API node.js 应用程序简化:
const { exec } = require('child_process');
var userInput = 'untrusted source';
var cmd = `/bin/echo "${userInput}"`;
exec(cmd, function(err, stdout, stderr) {
console.log('echo: ' + stdout);
});
假设userInput 来自不受信任的来源,需要做些什么来避免任何漏洞?例如,echo 的引用 "${userInput}" 参数可避免输入 'evil spirit; rm -rf /' 造成损坏。还需要做些什么来确保安全?
更新:目标是通过 intranet 上的 REST API 使文件系统中的一些现有 shell 脚本/命令可用。
【问题讨论】:
-
转义所有反斜杠和引号,您将得到一个基本可以但仍然很幼稚的解决方案
-
不要运行未经测试的代码。
-
@Kalycon:是的,反引号很明显,如
'untrusted `date`' -
@GetOffMyLawn:“不要运行未经测试的代码”/“使用虚拟机”在这种情况下没有帮助。目标是通过 REST API 使 Intranet 上现有的特定 shell 脚本/命令可用(我更新了帖子以进行澄清)
标签: javascript node.js filter exec sanitization