fix(meeting): Task 16 修复 code-reviewer 审计 P0 四项 + 落盘审查报告
code-reviewer 子代理(docs/reviews/2026-04-23-phase2e-2-code-review.md)对 Phase 2e-2 整体做全栈审计,暴露 P0 × 4 / P1 × 8 / P2 × 8 / Nit × 11。本次先修 P0: - P0-1 / P0-2 媒体资源归属越权: 新增 assertOwnsResource(roomCode, userID, kind, id) helper,用 resourceTrackKey Redis Set SIsMember 校验 transport/producer/consumer 归属;统一接入 OnTransportConnect / OnProduceStart / OnConsumeStart / OnConsumeResume / OnProducerClose 五个信令入口, 一次封死同类横向越权漏洞(Redis 查询失败时 fail-closed,避免抖动开口子)。 新增 service.ErrResourceNotOwned 错误常量。 - P0-3 CreateRoom Router 失败吞错: 旧实现 mediaErr != nil 仅 logs.Warn 继续返回成功 → zombie 房间 + 入会必败 + 一人一会议名额被占。改为 fail-closed 补偿:LeaveRoom + MarkEnded(system_error) + 返回新 service.ErrMediaServiceUnavailable,controller.handleError 映射为 500。 - P0-4 会议密码明文走 URL: join.vue onNext 旧逻辑把密码拼 ?password=xxx,浏览器历史 / DevTools 留痕。 新增 meetingStore.draftJoinPayload 内存态草稿,join.vue 只跳转 ?mode=join&code=xxx,preview.vue onLoad 读取后立即 draftJoinPayload = null 清空, 邀请链接里的 password 参数一律忽略。 验证: - cd backend/go-service && go build ./... 通过 - cd frontend && npm run build:h5 通过 - 仅剩 1 个预先存在 unusedparams warning,与本次改动无关 P1 / P2 / Nit 清单保留在审查报告,按顺序继续处理。 Made-with: Cursor
This commit is contained in:
@@ -120,6 +120,15 @@ export const useMeetingStore = defineStore('meeting', () => {
|
||||
*/
|
||||
const draftCreatePayload = ref(null)
|
||||
|
||||
/**
|
||||
* 加入会议密码草稿(Task 16 P0-4 修复)
|
||||
* 原实现把密码明文拼在 uni.navigateTo 的 URL query 里,浏览器历史 / DevTools 都会留痕,
|
||||
* 违背设计文档 §2.2.1 "邀请链接仅携带 token 不携带密码"的约束。
|
||||
* 新流程:join.vue 填完密码 → 写入本字段 → 只跳转 `?mode=join&code=XXX-XXX-XXX` → preview.vue 读取后立即清空。
|
||||
* 字段:{ code, password } 或 null
|
||||
*/
|
||||
const draftJoinPayload = ref(null)
|
||||
|
||||
/**
|
||||
* 设备预览页的设备选择与显示名(Task 10)
|
||||
* preview.vue 选完设备后写入,入会时作为 mediaPrefs 传给 createAndEnter / joinAndEnter
|
||||
@@ -1166,6 +1175,7 @@ export const useMeetingStore = defineStore('meeting', () => {
|
||||
localProducers,
|
||||
remoteConsumers,
|
||||
draftCreatePayload,
|
||||
draftJoinPayload,
|
||||
devicePreview,
|
||||
speakingMap,
|
||||
uiPrefs,
|
||||
|
||||
Reference in New Issue
Block a user