我通过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,但这没关系。我对其他文件的代码更加困扰。
答案 0 :(得分:0)
是的,file2
无法访问secretVariable
的{{1}}是正确的,通过关闭它已经足够隐藏了。
file2由客户在运行时提供,代码部署到服务器
然后你输了。不要只在您的服务器上运行不受信任的代码!代码使用file1
代替var f1 = fs.readFileSync('./file1');
,暴露您的代码及其秘密"这将是微不足道的。变量。可能还有其他无数种方式。
如果要运行不受信任的代码,则需要使用适当的沙盒解决方案。