5.1 KiB
5.1 KiB
前端加固增量记录
这份文档用于补充 frontend-hardening.zh-CN.md 在最近一轮 Activities / Ranking 加固中的新增改动。
本轮补充
- 生产构建混淆进一步收紧,
esbuild在生产相关模式下显式开启了更强的标识符、语法和空白压缩,并去除了合法注释输出。相关文件在 vite.config.js。 - 公共背景组件 BackgroundLayer.vue 新增了
useCanvas模式,装饰性多层背景会优先绘制到单个 canvas,而不是在 DOM 中直接暴露多张<img>。 canvas背景已扩展到更多高风险页面: LesserBairam/index.vue, LoginReward/index.vue, LuckyDollars/Season3/index.vue, LuckyDollars/Season4/index.vue, SpringFestival/index.vue, Ranking/Couple/index.vue, Ranking/GamesKing/index.vue, Ranking/KingAndQueen/TopList.vue, Ranking/Overall/Ranking.vue, Ranking/WeeklyStar/WeeklyStar.vue。- 第二轮语义类名收口已继续推进,当前已覆盖: Ranking/Couple/index.vue, LuckyDollars/Season4/index.vue, SpringFestival/index.vue, SpringFestival/Ranking.vue, Ranking/Overall/Ranking.vue, Ranking/WeeklyStar/WeeklyStar.vue。
- SpringFestival/Ranking.vue 已额外做了时序加固:
组件会在
nextTick()之后再注册IntersectionObserver,并在onUnmounted时执行disconnect(),避免监听节点还没稳定挂载时就注册,或页面切换后残留观察器。 - Ranking/Couple/Ranking.vue 已清理上一轮遗留的乱码注释,并统一替换为中文注释,方便后续排查与跨分支迁移。
- BackgroundLayer.vue 的
useCanvas继续保持显式开启,而没有改成默认值true: 这是为了避免把所有背景层都切到 canvas 渲染路径,给普通页面增加不必要的加载、绘制和重绘成本。 - protectedAssets.js 中的
toCssBackgroundImage()作用也已明确: 它负责把likei-protected:地址还原为 CSS 可直接使用的url(...)字符串,主要用于必须保留background-image的内联样式场景。
当前边界
- 这轮改动依然属于“提高门槛”,不是“彻底防住”。
canvas能降低从 Elements 面板直接抄背景结构的便利度,但防不住抓包、运行时 Hook 或最终像素提取。- 类名和结构收口能降低产物可读性,但不能阻止有经验的人在页面完全渲染后继续还原布局。
验证建议
- 使用
npm run build验证生产包可正常构建。 - 使用
npm run dev:prod或npm run preview验证活动页、榜单页在生产态逻辑下仍能正常显示。 - 重点检查
SpringFestival、Season4、WeeklyStar、Overall这几类近期改动较多的页面。
atu-prod 迁移建议
- 如果后续要在
atu-prod分支复用同类处理,优先迁移本轮涉及的三个核心文件: Ranking/Couple/Ranking.vue、 BackgroundLayer.vue、 protectedAssets.js。 - 同步迁移文档文件,避免分支间的实现与说明脱节: frontend-hardening.zh-CN.md、 frontend-hardening.zh-CN.updates.md。
- 后续如果主分支继续更新了这些文档,切到目标分支后可直接执行:
npm run docs:sync:security -- master - 该命令依赖脚本 scripts/sync-security-docs.js,前提是主分支里的文档版本已经提交到 Git。