merge: identity u01-u05
This commit is contained in:
@@ -1237,3 +1237,30 @@ issue #3 未关闭,`feat/fix-3-downlink-deadlock` 未合入 `main`。下面是
|
||||
5. **建议的正确方向**
|
||||
- 在 broker 把对本连接的下行 `InjectPacket` 与上行 worker 解耦:上行读循环先写完 PUBACK,处理 `HandleUplink` 期间不要同步向本连接注入;handler 返回后再发 `resp` 和 `group_event`。不要靠固定 `Sleep`。`InlineClient: true` 保持,`OnPublish` 对 InlineClient 继续放行。
|
||||
- 覆盖 presence 等其他同步 `PublishDown`,而不只包一层 `emit`。
|
||||
|
||||
### 复审修复 U-01
|
||||
|
||||
1. **开启自助注册必须已有 8–64 字符安全码**
|
||||
- 原条款:PRD F23 / D14:管理员开启并设置注册安全码(8–64 字符);注册必须带当前安全码。
|
||||
- 实际做法:`register()` 在锁定检查前,若存储码不是 8–64 字符则 403 `registration_closed` 并记不含码的警告,不计入锁定。`PUT /api/admin/registration` 在同一写操作末尾读回开关与安全码,开启且码不合法则 400 并回滚;允许一次提交 `enabled`+`code`/`generate`。后台无已保存安全码时禁用开关。
|
||||
- 原因:新库无码行或空码时 `constantTimeEqual("", "")` 为真,只开开关即可裸注册。
|
||||
- 备选方案:仅拦管理 PUT、不拦已处于「开启+空码」的旧库(否决,缺少纵深防御)。
|
||||
- 影响:原先「先开开关再设码」的两步会 400;须先设码或一次提交开启与码。
|
||||
|
||||
### 复审修复 U-04
|
||||
|
||||
1. **锁定计数表过期清理与总量上限**
|
||||
- 原条款:DEVELOPMENT 第 5 节锁定计数;issue #42。
|
||||
- 实际做法:`internal/auth/locks.go` 的 Fail/Check 顺手删除已过期且最近失败在窗口外的条目;每 1024 次或每分钟全表扫描;默认上限 65536,超出时优先淘汰最旧的非锁定条目。生产接线使用 `auth.NewLoginLocks()`。
|
||||
- 原因:注册安全码错误与错误 API 令牌按 IP 建条目,轮换地址会使 map 只增不减。
|
||||
- 备选方案:一并改 `internal/admin/memlock.go`(否决,本波只改 locks.go;admin 测试用内存锁若仍独立注入需后续对齐)。未改对话密码锁键(U-03)。
|
||||
- 影响:过期未锁定条目会被回收;极端并发失败时最早的非锁定计数可能被挤出。
|
||||
|
||||
### 复审修复 U-05
|
||||
|
||||
1. **目录 LIKE 转义;注册拒绝编号 inline**
|
||||
- 原条款:DEVELOPMENT 6.5 按编号前缀或名称包含匹配;issue #43。
|
||||
- 实际做法:目录查询对 `\`、`%`、`_` 转义并 `ESCAPE '\'`。注册拒绝编号 `inline`(与 mochi 内联客户端 ClientID 同名)。
|
||||
- 原因:未转义时搜 `e_ab` 会命中 `exab…`,搜 `%` 返回全部端。
|
||||
- 备选方案:在 `internal/protocol.ValidEndpointID` 加保留字,使开通/导入一并拒绝(否决,本波不改 protocol 与 `internal/admin/endpoints.go`)。后台开通与批量导入仍可能使用 `inline`,留给后续波次。
|
||||
- 影响:目录下划线按字面匹配;自助注册不能占用 `inline`。
|
||||
|
||||
@@ -396,6 +396,8 @@ Authorization: Bearer nxm_...
|
||||
```
|
||||
|
||||
- `generate: true` 时服务器生成 16 位安全码并忽略请求里的 `code`。
|
||||
- 允许一次提交 `{"enabled":true,"code":"..."}` 或 `{"enabled":true,"generate":true}`。
|
||||
- 最终状态为开启时,安全码必须是 8–64 字符;仅 `{"enabled":true}` 且库中没有合法安全码时返回 400,整次更新回滚。
|
||||
- 成功 `data` 同 GET。
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user