首页 > 解决方案 > 在 Linux (Ubuntu) 服务器中保护 node.js exec 命令行

问题描述

将使用 Node.js 执行命令行的代码示例。它将返回页面的完整 HTML。

const getPageHtmlResponse = (fullUrl) => {//fullUrl is come from input form in web page
return new Promise((resolve, reject) => {
    try {
        const exec = require('child_process').exec
        exec("curl "+fullUrl, (err, stdout, stderr) => resolve(stdout))
    } catch (error) {
        resolve(false)
    }
});
}
  1. 这段代码可能不安全吗?我的意思是黑客可以在其上注入另一个命令来操纵系统或服务器?

  2. 如果是的话,有什么好方法可以逃脱它或使它安全吗?

标签: node.jslinuxshellubuntucommand

解决方案


不要使用child_process.exec(). 来自用户输入的巧妙制作的字符串将从您的程序中启动任意代码,这是您确实希望避免的。

相反,请child_process.execFile()按如下方式使用:

const getPageHtmlResponse = (fullUrl) => {//fullUrl is come from input form in web page

return new Promise((resolve, reject) => {
    try {
        const execFile = require('child_process').execFile
        execFile("/path/to/curl", fullUrl, (err, stdout, stderr) => resolve(stdout))
    } catch (error) {
        resolve(false)
    }
});
}

execFile采用预先解析的命令列表并且不启动中间外壳,因此通过不受信任的 URL 启动程序的风险较小。

也可以看看

child_process.exec文件


推荐阅读