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

我使用string连接将参数添加到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 ); 

为什么string连接是一个问题,以及如何避免它?

检查你的grunt构build任务,看看是否有什么错误。 在child_process.exec中的string连接的代码中没有任何问题

你的代码很容易被命令注入 。 这取决于application来自哪里,您需要确保它不是由用户定制的。

恶意代码在你的例子是

 var application = '; rm -rf .' 

但它不会工作,因为你也试图通过pwd来改变当前目录。

一般的build议是要小心child_process.exec ,而不是使用child_process.execFilechild_process.spawn