如何在nodejs中隐藏调用者的函数实现

时间:2018-02-16 14:46:55

标签: javascript node.js security encapsulation

我通过module.exports导出js模块。调用函数需要此模块并调用导出的函数。

代码看起来像这样:

  

file1.js

module.exports = {
 Info: showInfo
}

function showInfo(param1, callback) {
 callback(null, getInfo(param1))
}
let secretCode = 'xyz';

function getInfo(p1) {
 return EncodeInfo(param1, secretCode);
}

function EncodeInfo(p2, p3) {
 //some code
}
  

file2.js

var f1 = require('./file1');

f1.Info("some value");

现在的问题是,客户在运行时提供了file2.js,并将代码部署到服务器。服务器入口点函数调用file2.js中的入口函数。 file2.js只能访问核心节点库,日志记录功能和请求模块。

我需要隐藏file1.js中写的内容。客户可以这样做以查看代码

console.log(f1.Info.toString());
//this will print following
/*
function showInfo(param1, callback){
    callback(null, getInfo(param1)) 
}
*/

这是可以的,因为隐藏了getInfo()代码。此外,隐藏了其他私有函数和变量。另外要提到客户无法安装任何其他节点模块,只提供file2.js

请注意,我无法控制他在file2.js中所写的内容,也无法在将file2.js与其余代码合并之前进行扫描。

问题1: 问题只是我的假设是正确的吗?或者有什么方法可以看到代码实现的其余部分或导入(需要)模块的任何其他细节?也许通过原型?

问题2: 有什么办法可以看到服务器入口点功能实现的细节。客户确实可以访问进程,因此可以访问process.env,但这没关系。我对其他文件的代码更加困扰。

1 个答案:

答案 0 :(得分:0)

是的,file2无法访问secretVariable的{​​{1}}是正确的,通过关闭它已经足够隐藏了。

  

file2由客户在运行时提供,代码部署到服务器

然后你输了。不要只在您的服务器上运行不受信任的代码!代码使用file1代替var f1 = fs.readFileSync('./file1');,暴露您的代码及其秘密"这将是微不足道的。变量。可能还有其他无数种方式。

如果要运行不受信任的代码,则需要使用适当的沙盒解决方案。