feat: 前端生产构建添加代码混淆
- 集成 vite-plugin-javascript-obfuscator 插件 - 配置中等偏高强度混淆策略(变量名、字符串、对象键、数字) - 仅生产构建时启用,不影响开发体验 - 仅混淆业务代码,排除第三方库 - 不生成 Source Map - 新增 frontend-obfuscation 规范
This commit is contained in:
117
openspec/specs/frontend-obfuscation/spec.md
Normal file
117
openspec/specs/frontend-obfuscation/spec.md
Normal file
@@ -0,0 +1,117 @@
|
||||
# 前端代码混淆
|
||||
|
||||
## Purpose
|
||||
|
||||
在生产构建时对前端业务代码进行混淆处理,增加逆向成本,防止代码被轻易复制。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 生产构建时代码混淆
|
||||
|
||||
前端 SHALL 在生产构建时对业务代码进行混淆处理。
|
||||
|
||||
#### Scenario: 安装混淆依赖
|
||||
|
||||
- **WHEN** 添加代码混淆功能
|
||||
- **THEN** 前端 SHALL 使用 bun 安装 `vite-plugin-javascript-obfuscator` 和 `javascript-obfuscator` 依赖
|
||||
- **THEN** 前端 SHALL NOT 使用 npm 或 pnpm 安装依赖
|
||||
|
||||
#### Scenario: 配置混淆插件
|
||||
|
||||
- **WHEN** 配置 Vite 构建流程
|
||||
- **THEN** vite.config.ts SHALL 导入 `vite-plugin-javascript-obfuscator`
|
||||
- **THEN** 插件 SHALL 配置 `apply: 'build'` 仅在构建时生效
|
||||
- **THEN** 插件 SHALL 配置 `include` 仅包含业务代码(src/**/*.ts, src/**/*.tsx, src/**/*.js, src/**/*.jsx)
|
||||
- **THEN** 插件 SHALL 配置 `exclude` 排除 node_modules
|
||||
|
||||
#### Scenario: 变量名混淆
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** 业务代码中的变量名 SHALL 被转换为十六进制形式(如 _0x2b3c)
|
||||
- **THEN** identifierNamesGenerator SHALL 配置为 'mangled-shuffled'
|
||||
|
||||
#### Scenario: 字符串混淆
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** 业务代码中的字符串 SHALL 被编码为字符串数组
|
||||
- **THEN** stringArray SHALL 配置为 true
|
||||
- **THEN** stringArrayEncoding SHALL 配置为 ['base64']
|
||||
- **THEN** stringArrayRotate SHALL 配置为 true
|
||||
- **THEN** stringArrayShuffle SHALL 配置为 true
|
||||
- **THEN** stringArrayThreshold SHALL 配置为 0.75
|
||||
- **THEN** splitStrings SHALL 配置为 true
|
||||
- **THEN** splitStringsChunkLength SHALL 配置为 10
|
||||
|
||||
#### Scenario: 对象键混淆
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** 业务代码中的对象键 SHALL 被混淆
|
||||
- **THEN** transformObjectKeys SHALL 配置为 true
|
||||
|
||||
#### Scenario: 数字混淆
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** 业务代码中的数字 SHALL 被转换为表达式
|
||||
- **THEN** numbersToExpressions SHALL 配置为 true
|
||||
|
||||
#### Scenario: 调试保护
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** 混淆代码 SHALL 禁用浏览器调试器
|
||||
- **THEN** debugProtection SHALL 配置为 true
|
||||
- **THEN** debugProtectionInterval SHALL 配置为 2000
|
||||
|
||||
#### Scenario: 禁用 console 输出
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** 混淆代码 SHALL 移除所有 console 输出
|
||||
- **THEN** disableConsoleOutput SHALL 配置为 true
|
||||
|
||||
#### Scenario: 不混淆第三方库
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** node_modules 中的代码 SHALL NOT 被混淆
|
||||
- **THEN** vendor chunks(React、TDesign、Recharts)SHALL 保持原有压缩状态
|
||||
|
||||
#### Scenario: 不生成 Source Map
|
||||
|
||||
- **WHEN** 生产构建执行
|
||||
- **THEN** 构建产物 SHALL NOT 包含 Source Map 文件
|
||||
- **THEN** vite.config.ts 中 build.sourcemap SHALL 配置为 false
|
||||
|
||||
#### Scenario: 不启用控制流扁平化
|
||||
|
||||
- **WHEN** 配置混淆选项
|
||||
- **THEN** controlFlowFlattening SHALL 配置为 false
|
||||
- **THEN** 前端 SHALL NOT 使用控制流扁平化混淆
|
||||
|
||||
#### Scenario: 不注入死代码
|
||||
|
||||
- **WHEN** 配置混淆选项
|
||||
- **THEN** deadCodeInjection SHALL 配置为 false
|
||||
- **THEN** 前端 SHALL NOT 注入死代码
|
||||
|
||||
#### Scenario: 不启用自我保护
|
||||
|
||||
- **WHEN** 配置混淆选项
|
||||
- **THEN** selfDefending SHALL 配置为 false
|
||||
- **THEN** 前端 SHALL NOT 启用自我保护机制
|
||||
|
||||
#### Scenario: 构建产物验证
|
||||
|
||||
- **WHEN** 生产构建完成
|
||||
- **THEN** 构建产物 SHALL 通过功能测试
|
||||
- **THEN** 关键业务功能 SHALL 正常工作
|
||||
- **THEN** 页面 SHALL 正常渲染
|
||||
- **THEN** API 调用 SHALL 正常执行
|
||||
|
||||
### Requirement: 开发模式不混淆
|
||||
|
||||
前端 SHALL 仅在生产构建时启用混淆,开发模式不受影响。
|
||||
|
||||
#### Scenario: 开发模式跳过混淆
|
||||
|
||||
- **WHEN** 执行 vite dev 启动开发服务器
|
||||
- **THEN** 代码 SHALL NOT 被混淆
|
||||
- **THEN** 开发体验 SHALL 保持不变
|
||||
- **THEN** 热更新 SHALL 正常工作
|
||||
@@ -502,6 +502,9 @@ TBD - 提供供应商、模型配置和用量统计的前端管理界面
|
||||
|
||||
- **WHEN** 为生产构建前端
|
||||
- **THEN** Vite SHALL 生成优化的静态文件
|
||||
- **THEN** Vite SHALL 对业务代码执行混淆处理
|
||||
- **THEN** 混淆 SHALL 仅应用于 src 目录下的业务代码
|
||||
- **THEN** 混淆 SHALL NOT 应用于 node_modules 中的第三方库
|
||||
|
||||
### Requirement: 与后端 API 通信
|
||||
|
||||
|
||||
Reference in New Issue
Block a user