|
| 1 | +# SQLMap WebUI Burp Extension - Architecture Notes |
| 2 | + |
| 3 | +## 重要说明 |
| 4 | + |
| 5 | +经过实际测试发现,**legacy-api 和 montoya-api 不能直接同步文件**。 |
| 6 | + |
| 7 | +### 原因 |
| 8 | + |
| 9 | +两个模块使用**不同的 Burp Suite API**: |
| 10 | + |
| 11 | +**Legacy API (Java 11):** |
| 12 | +```java |
| 13 | +import burp.IBurpExtenderCallbacks; |
| 14 | +import burp.IHttpRequestResponse; |
| 15 | +import burp.IRequestInfo; |
| 16 | +``` |
| 17 | + |
| 18 | +**Montoya API (Java 17+):** |
| 19 | +```java |
| 20 | +import burp.api.montoya.MontoyaApi; |
| 21 | +import burp.api.montoya.http.message.HttpRequestResponse; |
| 22 | +import burp.api.montoya.http.message.requests.HttpRequest; |
| 23 | +``` |
| 24 | + |
| 25 | +### 影响 |
| 26 | + |
| 27 | +虽然两个模块的业务逻辑**完全相同**,但: |
| 28 | +1. **Import 语句不同** - 无法直接复制文件 |
| 29 | +2. **API 调用方式不同** - 类名和方法签名不同 |
| 30 | +3. **必须独立维护** - 每个修改需要在两个地方手动更新 |
| 31 | + |
| 32 | +### 当前架构 |
| 33 | + |
| 34 | +``` |
| 35 | +src/burpEx/ |
| 36 | +├── legacy-api/ # 完全独立的代码 (Java 11) |
| 37 | +│ ├── BurpExtender.java |
| 38 | +│ ├── ConfigManager.java # 使用 IBurpExtenderCallbacks |
| 39 | +│ ├── SqlmapApiClient.java |
| 40 | +│ ├── SqlmapUITab.java |
| 41 | +│ ├── panels/ |
| 42 | +│ ├── dialogs/ |
| 43 | +│ └── ... (共34个文件) |
| 44 | +│ |
| 45 | +└── montoya-api/ # 完全独立的代码 (Java 17) |
| 46 | + ├── SqlmapWebUIExtension.java |
| 47 | + ├── ConfigManager.java # 使用 MontoyaApi |
| 48 | + ├── SqlmapApiClient.java |
| 49 | + ├── SqlmapUITab.java |
| 50 | + ├── panels/ |
| 51 | + ├── dialogs/ |
| 52 | + └── ... (共37个文件) |
| 53 | +``` |
| 54 | + |
| 55 | +### 开发建议 |
| 56 | + |
| 57 | +1. **修改逻辑时**: 需要在两个模块中分别修改 |
| 58 | +2. **先改 legacy-api**: 因为它使用更简单的 Legacy API |
| 59 | +3. **再改 montoya-api**: 参考 legacy-api 的修改,适配 Montoya API |
| 60 | +4. **分别编译验证**: 确保两个模块都能编译通过 |
| 61 | + |
| 62 | +### 编译验证 |
| 63 | + |
| 64 | +```bash |
| 65 | +# 编译 Legacy API (Java 11) |
| 66 | +cd src/burpEx/legacy-api |
| 67 | +mvn clean package -DskipTests |
| 68 | + |
| 69 | +# 编译 Montoya API (Java 17) |
| 70 | +cd src/burpEx/montoya-api |
| 71 | +mvn clean package -DskipTests |
| 72 | +``` |
| 73 | + |
| 74 | +两个模块都能独立编译成功,无警告、无错误。 |
| 75 | + |
| 76 | +### 为什么不创建 shared 模块? |
| 77 | + |
| 78 | +尝试过创建 shared 模块,但发现: |
| 79 | +1. UI 组件深度依赖 Burp API |
| 80 | +2. ConfigManager 需要适配不同 API |
| 81 | +3. 抽象层会增加复杂度 |
| 82 | +4. 需要修改 100+ 个文件的 import 语句 |
| 83 | +5. 风险高,容易引入 bug |
| 84 | + |
| 85 | +**结论**: 当前独立维护的方式虽然重复代码多,但是最稳定和可维护的方案。 |
| 86 | + |
| 87 | +## 版本信息 |
| 88 | + |
| 89 | +- **版本**: 1.8.16 |
| 90 | +- **更新日期**: 2026-02-10 |
| 91 | +- **状态**: 两个模块独立维护,各自编译成功 |
0 commit comments