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

362 天前
sirz  sirz

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

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

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

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

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

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

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

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

© 2021 V2EX