如何在节点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.execFile
或child_process.spawn
。