如何在节点child_process中转义命令注入?

时间:2015-09-14 13:42:27

标签: node.js shell 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 );

为什么字符串连接成为问题以及如何避免它?

2 个答案:

答案 0 :(得分:3)

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

示例中的恶意代码为

var application = '; rm -rf .'

但由于您还尝试通过pwd更改当前目录,因此无法使用。

general recommendation要谨慎对待child_process.exec并改为使用child_process.execFilechild_process.spawn

答案 1 :(得分:0)

检查你的grunt构建任务以查看是否有任何错误。在child_process.exec

中使用字符串连接的代码没有任何问题