如何在nodej中隐藏函数实现



我正在通过模块导出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:有什么办法可以看到服务器入口点功能实现的详细信息。客户确实可以访问流程,因此可以访问proces.env,但这还可以。我对其他文件的代码更加困扰。

是的,file2无法访问file1secretVariable是正确的,它可以通过闭合足够完善。

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

然后你迷路了。不仅可以在服务器上运行不受信任的代码!代码使用var f1 = fs.readFileSync('./file1');而不是require('./file1'),公开您的代码及其"秘密"变量是微不足道的。可能还有多种其他方式。

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

最新更新