gpt4 book ai didi

javascript - 使用 Node.js 调用预先解析的命令行

转载 作者:行者123 更新时间:2023-12-03 05:46:47 25 4
gpt4 key购买 nike

我需要调用以下命令,其中密码是用户输入的。但是,我担心可能会受到攻击,例如 "; rm -rf/;" 是用户给出的输入。

var checkPassword = exec('echo "'+password+ '"| cracklib-check\n', function(err, stdout, stderr) {
...
...
}

有没有一种方法可以使用预先解析的参数(最好是 Nodejs/JavaScript 原生的)来调用命令,有点像用于避免 SQL 注入(inject)的预准备语句?

我也许可以通过将某些字符列入黑名单来避免这个问题,但这似乎不太可靠,我想避免它是可能的。

最佳答案

正如您所指出的,使用用户提供的输入构建命令行是一个安全问题。通常,您会编写一个包装器,在调用命令之前验证每个用户提供的参数是否符合白名单。

对于您的情况,有一个更简单的解决方案:您正在构建一个命令行,只需将密码发送到 cracklib-check 的标准输入。您可以切换到 child_process.spawn,而不是使用 child_process.exec,它允许您直接写入标准输入,从而无需使用用户提供的输入构建命令行。

以下示例代码避免了安全问题:

const spawn = require('child_process').spawn;

// Read password from argument to nodejs invocation
var password = process.argv[2];

// Spawn cracklib-check
var cracklib_check = spawn("/usr/sbin/cracklib-check");

// Send password to cracklib-check STDIN
cracklib_check.stdin.write(password);
cracklib_check.stdin.end();

// Process results of cracklib-check
cracklib_check.stdout.on('data', function (data) {
console.log("[*] " + data);
});

cracklib_check.stderr.on('data', function (data) {
console.log("[-] " + data);
});

关于javascript - 使用 Node.js 调用预先解析的命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40309992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com