目前有个需求实时处理 openresty 反代站点的 JS ,将 JS 通过 obfuscator 混淆后再响应。
实现:Lua 在 access 阶段请求源站 JS 调用 OB 提供的 API (内网)混淆后放到共享内存,在 bodyFilter 处理阶段取内存中的 JS 。
问题:性能太差了,源站 JS 请求多的情况下,请求时长最高能到 30m ,有没有什么别的方案可以在 openresty 中实现该功能,或者有什么什么优化思路。
1
google2020 266 天前
不要实时生成,改预生成,发布程序或者修改 JS 之后先生成好放那里。
|
2
rrfeng 266 天前 via Android
这玩意本来就耗时长啊,只能缓存下来。首次也没啥办法…
|
3
sirz OP 打错了,30s
|
4
sirz OP @google2020 waf 产品,需求就是这
|
5
sirz OP 有没有别的思路搞定这个需求,性能损耗可以接受,目前这种方案的损耗太大了
|
6
google2020 266 天前
@sirz 混淆很吃 CPU ,你看下有没达到混淆器官方性能,达到了就是硬件不够,要加硬件。这个响应慢跟 openresty 没关系,本质上 lua 只是反代混淆器 HTTP API ,增加不了几十毫秒。
|
7
tomczhen 266 天前
真有办法让 js 混淆到毫秒级,前端娱乐圈早就宣传了吧( doge
|
8
SmiteChow 266 天前
选一个不做语法分析的混肴算法
|
9
janus77 266 天前
主要先看下方案本身性能如何吧,看看各个阶段耗时分别是多少,其中混淆器执行的部分耗时多少?混淆器的理论性能又是多少?
|
10
ShuA1 266 天前
1. 使用工具先预热全部 js
2. 将混淆后的 js 静态文件放到 tmp 目录,不要放在内存 |
12
gongquanlin 266 天前
性能慢是因为解析了 js 的 ast 了吧,看看能不能对源码做加密然后固定 Js 再去解密?不要每次都解析 ast 呢;搞个 jsvmp ,源码加载之后只按固定规则将字符串加密成二进制数据,jsvmp 或者 wasm 进行解密运行;这样搞就是如果让人搞到了解密的方法容易被搞出来源码
|
13
JefferyWang 266 天前
混淆完缓存下来啊
|
14
sirz OP 缓存了的,第一次请求在 access 阶段就要混淆了,这个阶段目前规避不了卡顿的情况,之后可以直接走缓存
|
15
Shazoo 265 天前
预生成 N 个版本,lua 控制引用不香?
|