如何在节点 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.execFile
或child_process.spawn
。
我正在使用字符串连接向 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.execFile
或child_process.spawn
。