如何在节点 child_process 中逃避命令注入?

How do I escape command injection in node child_process?

我正在使用字符串连接向 child_process.exec 命令添加参数,但它们被忽略了

var exec = require( "child_process" ).exec;

var cmd = exec( "grunt build --project="+application, {
        cwd: application
    },
    function( error, stdout, stderr ){});

cmd.stdout.pipe( process.stdout );
cmd.stderr.pipe( process.stderr );

为什么字符串连接是个问题,如何避免?

检查你的 grunt 构建任务,看看是否有任何问题。 child_process.exec

中的字符串连接在您的代码中没有任何问题

您的代码容易受到 command injection 的攻击。这取决于 application 来自哪里,您需要确保它不能由用户自定义。

您示例中的恶意代码是

var application = '; rm -rf .'

但它不起作用,因为您还试图通过 pwd 更改当前目录。

general recommendation要小心child_process.exec,改用child_process.execFilechild_process.spawn