openresty+Lua 实时混淆站点 JS 性能

270 天前
 sirz

目前有个需求实时处理 openresty 反代站点的 JS ,将 JS 通过 obfuscator 混淆后再响应。

实现:Lua 在 access 阶段请求源站 JS 调用 OB 提供的 API (内网)混淆后放到共享内存,在 bodyFilter 处理阶段取内存中的 JS 。

问题:性能太差了,源站 JS 请求多的情况下,请求时长最高能到 30m ,有没有什么别的方案可以在 openresty 中实现该功能,或者有什么什么优化思路。

1619 次点击
所在节点    程序员
15 条回复
google2020
270 天前
不要实时生成,改预生成,发布程序或者修改 JS 之后先生成好放那里。
rrfeng
270 天前
这玩意本来就耗时长啊,只能缓存下来。首次也没啥办法…
sirz
270 天前
打错了,30s
sirz
270 天前
@google2020 waf 产品,需求就是这
sirz
270 天前
有没有别的思路搞定这个需求,性能损耗可以接受,目前这种方案的损耗太大了
google2020
270 天前
@sirz 混淆很吃 CPU ,你看下有没达到混淆器官方性能,达到了就是硬件不够,要加硬件。这个响应慢跟 openresty 没关系,本质上 lua 只是反代混淆器 HTTP API ,增加不了几十毫秒。
tomczhen
270 天前
真有办法让 js 混淆到毫秒级,前端娱乐圈早就宣传了吧( doge
SmiteChow
270 天前
选一个不做语法分析的混肴算法
janus77
270 天前
主要先看下方案本身性能如何吧,看看各个阶段耗时分别是多少,其中混淆器执行的部分耗时多少?混淆器的理论性能又是多少?
ShuA1
270 天前
1. 使用工具先预热全部 js
2. 将混淆后的 js 静态文件放到 tmp 目录,不要放在内存
asuraa
270 天前
@sirz 对比下 md5 一样的话 输出缓存 不一样再生成替换不就行了
gongquanlin
270 天前
性能慢是因为解析了 js 的 ast 了吧,看看能不能对源码做加密然后固定 Js 再去解密?不要每次都解析 ast 呢;搞个 jsvmp ,源码加载之后只按固定规则将字符串加密成二进制数据,jsvmp 或者 wasm 进行解密运行;这样搞就是如果让人搞到了解密的方法容易被搞出来源码
JefferyWang
270 天前
混淆完缓存下来啊
sirz
269 天前
缓存了的,第一次请求在 access 阶段就要混淆了,这个阶段目前规避不了卡顿的情况,之后可以直接走缓存
Shazoo
269 天前
预生成 N 个版本,lua 控制引用不香?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1019414

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX