module.exports = (pwd, data, ext = null) => {
// 生成一个随机变量名
let randomID;
if (ext.opts.otherConf['use-random-variable'] === 1) {
randomID = antSword.utils.RandomChoice(antSword['RANDOMWORDS']);
} else {
randomID = `${antSword['utils'].RandomLowercase()}${Math.random().toString(16).substr(2)}`;
}
data[randomID] = Buffer
.from(data['_'])
.toString('base64');
data[pwd] = `@eval(@base64_decode($_POST['${randomID}']));`;
delete data['_'];
return data;
}
该代码片段来自蚁剑.
我尝试写了一个 test.js,在其中定义 antSword 常量
然后再动态调用上面的代码,但是它会抛出 ReferenceError: antSword is not defined 异常
1
anzerwall 2021-07-20 14:41:29 +08:00
node 中的模块都处于闭包中,如果不是手动挂到 global 的话,是不能直接拿到。
window 环境下 script 中声明的变量会自动挂到 window,你看是不是这个区别导致的 |
3
libook 2021-07-20 18:00:19 +08:00
global 肯定能解决问题,只不过不一定是个好办法,比如任何 module 都可以访问 global 里的属性,以及 global 上属性过多可能会影响性能。
这个文件 export 出去的是一个箭头函数,你看是不是可以把 antiSword 作为一个函数参数,在调用的时候传进来。 如果 antiSword 会在 app.entry.js 里 export 出来的话也可以在这个文件里 require app.entry.js 。 当然也可以把 antiSword 从 app.entry.js 里拆出来,作为一个公共 module 让各个其他 module require 。 |
4
dicc OP @libook 你这个思路是对的,不过我是想偷懒,用最简单的方式复用.而且这样在它的源码更新的情况下,尽量少的改动就可以用起来
|
5
libook 2021-07-21 10:07:39 +08:00
@dicc #4 这就看你的项目对技术债是什么态度了,如果是临时性的改动或项目预期维护周期不长的话也就无所谓了,可以简单粗暴地来,如果是长期维护的项目的话,还是得多多少少考虑避免技术债的,前面爽了后面可能就会哭。
|