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

2024-02-29 11:41:54 +08:00
 sirz

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

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

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

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

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

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

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

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

© 2021 V2EX