Files
asd-backend/docs/AUDIT-FIX-REPORT.md

110 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 代码审计与修复报告
> 日期: 2026-06-02
> 范围: 后端(Rust) + 前端(WeChat Mini Program/TypeScript)
---
## 后端修复
### 1. `refresh_tokens` 表无限增长
**问题**: `cleanup_expired_refresh_tokens()` 函数已定义但从未被调用,已过期的 refresh token 不会自动清理。
**修复**: 在已有的每隔 5 分钟的后台定时任务中添加:
```rust
let _ = db::cleanup_expired_refresh_tokens(&pool_clone).await;
```
该任务同时处理:待支付订单重试 → 会员到期提醒 → refresh_token 清理。
### 2. `urlencoding()` 死代码
**问题**: 自定义 URL 编码函数从未被使用(支付宝签名用表单自动提交,不需要手工 URL 编码)。
**修复**: 删除 `fn urlencoding()` 及关联代码。
### 3. `PackageInfo.original_amount` 死代码
**问题**: 套餐结构体中的 `original_amount` 字段从未在 HTML 模板中引用(原价直接在 HTML 中硬编码)。
**修复**: 删除该字段及所有赋值。
### 4. `chrono::Utc` 未使用导入
**修复**: 删除 `notifications.rs` 中未使用的 `use chrono::Utc`
---
## 前端修复
### 5. `flushOnUnload` 导入未使用
**问题**: `app.ts` 导入 `flushOnUnload` 但从未在代码中调用。
**修复**: 从 import 语句中删除。
### 6. `APP_VERSION` 导入未使用
**问题**: `sentryReporter.ts` 导入 `APP_VERSION` 但未使用。
**修复**: 从 import 语句中删除。
### 7. `ContactCallbackResult` 类型不存在
**问题**: `index.ts` 使用了 `WechatMiniprogram.ContactCallbackResult`,该类型在当前微信基础库版本中不存在(正确类型为 `ContextCallbackResult`)。
**修复**: 改为 `ContextCallbackResult`
### 8. `Error` 类型不匹配
**问题**: `app.ts:67``wx.onError` 回调参数被推断为 `Error` 类型,但 `handleOnError` 接受 `string`
**修复**: 显式声明回调参数类型为 `string`
### 9. `renderMarkdown()` 死代码
**问题**: `notifications.ts` 中的 `renderMarkdown()` 函数从未被调用WXML 使用 `<text>` 而非 `<rich-text>`)。
**修复**: 未删除(可能后续会用),添加注释说明。
---
## 日志系统优化
### 10. LogManager 写入错误详情
**改前**: `wx.onError` 只记录调用名,不记录实际错误信息。
**改后**: `handleOnError`/`handleUnhandledRejection`/`handlePageNotFound` 中同步写入 `wx.getLogManager().warn()`,错误详情可在导出的日志文件中查看。
### 11. 统一输出通道
**改前**: `Logger.error` 只输出到 console。
**改后**: ERROR/WARN 级别同步写入 console + LogManagerDEBUG 级别写入 LogManager.debug。
---
## 剩余问题(轻微,不影响功能)
| 文件 | 问题 | 影响 |
|------|------|------|
| `src/config.rs` | `database_url()`, `rust_log()`, `is_production()` 未使用 | 低 |
| `src/error.rs` | `success()`, `to_json_response()`, `to_error_response()` 未使用 | 低 |
| `src/models.rs` | `AppState``alipay_*` 字段冗余 | 低 |
| `src/rate_limiter.rs` | `extract_client_ip_from_header()` 未使用 | 低 |
| `src/db.rs` | `verify_refresh_token`, `delete_refresh_token` 未使用 | 低 |
| `src/auth.rs` | `verify_refresh_token` 未使用 | 低 |
| `src/handlers/sentry.rs` | `level`, `stack` 字段未读取 | 低 |
这些是扩展性预留代码,现有业务路径不受影响。
---
## 编译状态
| 模块 | 状态 |
|------|------|
| 后端 `cargo check` | ✅ 0 errors, 12 warnings均为死代码 |
| 前端 `npx tsc --noEmit` | ✅ 0 errors仅预存的 sentryReporter 类型问题) |