games-development-ai/.agents/rules/security-and-reliability.md
zizi 8a59a35133 docs(audit)+docs(mvp): 三向审计修复全链入库——报告+W1回填+创始人拍板波+W2清洗+三件产出
- 审计报告 HJ-AUDIT-001 入库 + W1 文档回填波(技术决策版/Doc B/开发团队版废止横幅/AGENTS.md/两规则档/tech-decisions)
- 创始人拍板波(2026-06-10 晚,回填铁律逐项执行):
  · R4=维持 D2 按 D2 改建(M-c 建 merge→idle→tycoon,动作类降 P1 留契约)→ D2 复审注+tech-decisions #6
  · 鉴权七项全拍(§9.1:C 验证码+邀请码旁路/受限激活/开放注册/创作限白名单/一键登录/实名提现前/纯客户端 anonId)→ glossary+events.schema.json 同步
  · A1 闸门看板建账(12+1 项含短信报备+大模型登记/算法备案/分账选型,主体已确认)+ 律所合规咨询 brief
  · 奇绩 ★1/2/3 定稿 + 品牌造梦→绘境清扫(4 档正文+文件名、demo 改名 huijing-ai-demo.html、禁投/禁外发横幅、内部引用 5 处)
  · M-c 四细节(两批 merge 先行/idle 纯前端+storage/10 校准+20 正式/拖拽为主)
  · R3 收口(叠加规则=IP 从创作者份额出·净额基数·平台恒 20%,eCPM 档 15/30/60)→ D3 复审注+glossary+BP:299 勘误
- W2 对外清洗收口:BP 改造版红线清洗(20 处锁风系红线词清零/独家→非独家/绝对化清零/06-10 实证+三线排序入文,留 3★ 待创始人)
- 三件产出:鉴权 execution 版(V11/system 内扩展/14 @PermitAll 端点/NOT NULL 硬边界)+ Mc 模板波 review 版(已拍)+ 单位经济敏感性模型(基准 324 元/月/千DAU,覆盖基建需 1.33 万 DAU→实证 B 端现金线优先)
- 两本账同步:作战清单(五件拍板项清零)+ 进度总账(三行执行记录)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 08:51:30 +00:00

169 lines
11 KiB
Markdown
Raw 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.

# 安全、合规、可靠性与一致性硬底线
> 本文是造梦AI 不可逾越的**红线**。涉及安全、合规、幂等、一致性、可靠性、可观测性与 SDK 降级。任何设计/实现违反即驳回。
> 蒸馏来源:`docs/architecture/系统概要设计-技术决策版.md`(§3.4 SDK 降级 / §7.1-7.5 非功能 / §8 风险)、`docs/architecture/系统概要设计-开发团队版.md`(§4.2 / §10.5 内容安全)、`docs/architecture/技术架构与模块.md`(compliance 模块 T-CMP-* 技术功能,含锁风门 Gate)。
> 配套:编码/契约规范见 [`engineering-conventions.md`](engineering-conventions.md);元流程见 [`../workflows/ai-development-protocol.md`](../workflows/ai-development-protocol.md);事实蓝图见 [`../knowledge/product-and-architecture.md`](../knowledge/product-and-architecture.md);运行时/沙箱手册见 [`../skills/runtime-and-multichannel.md`](../skills/runtime-and-multichannel.md)。
---
## 1. 安全基线
| 层面 | 措施 | 落地阶段 |
|---|---|---|
| 接入防护 | WAF(阿里云/Cloudflare)+ DDoS 高防 | 上线前 |
| 传输 | 全站 HTTPS + HSTS + TLS 1.3 | Phase 1 |
| 鉴权 | OAuth2 + JWT + **Refresh Token 轮换(access 7天 / refresh 30天)** | Phase 1 |
| 权限 | RBAC + **DataPermission(创作者只看自己的项目/资产)** | Phase 1 |
| 游戏沙箱 | `iframe sandbox` + CSP + postMessage 来源校验 + schema 校验 | Phase 2 |
| 内容安全 | 四类检测:文本 / 图片 / AI 输出 / 音频 | Phase 2 |
| 注入防护 | Prompt 注入检测 + SQL 参数化 + XSS 过滤 + **SSRF 白名单**(内网 IP 阻断) | Phase 1 |
| 密钥管理 | Nacos 加密 / K8s Secret,**密钥 90 天轮换**;禁止硬编码进代码 | Phase 1 |
| 审计 | 全量操作日志 + **保留 180 天** + 关键操作实时告警 | Phase 1 |
| 渗透测试 | 上线前一次 + **每季度一次**,无 Critical/High 才放行 | 上线前 / 季度 |
> **权限必须在可信边界(网关 + 服务端)强制,前端不是边界。** 匿名玩家只能浏览试玩,不能发布/收藏/进后台。
### 1.1 游戏沙箱具体配置(runtime / compliance 共守)
- `iframe sandbox="allow-scripts allow-same-origin"`。**红线(2026-06-10 审计补,HJ-AUDIT-001)**:`allow-same-origin` 仅当游戏包托管于**独立源**(usercontent 子域,与宿主不同源)时方可使用——同源下 iframe 可触宿主 DOM/存储、甚至自移除 sandbox;独立源就绪前**禁用 `allow-same-origin`**。
- CSP:`script-src 'self'; connect-src 'none'`(**游戏内禁止任何网络请求**);CSP 经游戏包托管侧 **HTTP 响应头**下发,不以 meta 标签为唯一依赖。
- postMessage:校验来源 origin 在白名单 + 消息 schema 校验,防伪造。
- **LLM 产物消毒**:GameConfig 文案字段(title/label/theme 等)入库前白名单字符集+长度校验,渲染侧一律转义后绘制,**禁止 innerHTML/eval**(模板驱动后 LLM 注入面=配置字符串)。
- 资源总大小 ≤ 10MB,首屏 ≤ 2MB;创作者通过**配置(非代码)**驱动游戏,平台对运行时代码有完全控制权。
### 1.2 内容安全分层(自部署快检 + 商用兜底)
- 第一道:`safe-content-ai`(自部署)快检——免费、低延迟。
- 第二道:高风险样本送**阿里云内容安全**二次确认;文本/音频审核走阿里云 API;AI 输出走 Dify 节点内置 Guardrails。
- 阈值(Nacos 配置):**block = 0.7(直接拦截)/ review = 0.4(送人工)/ pass < 0.4(自动通过)**。
---
## 2. 创作链路 7 道门禁
在创作全链路设置 7 道门禁,确保产出质量与平台安全,缺一不可:
| 门禁 | 检测内容 | 阻断条件 | 责任模块 |
|---|---|---|---|
| ① Prompt 安全 | 违禁词 / 敏感意图 / 注入攻击 | 命中 → 拒绝 + 提示修改 | compliance |
| ② AI 产出合规 | 图片涉黄涉暴 / 文本违规 / 音频侵权 | 不通过 → 不入库 | compliance |
| ③ 资产入库 | 版权声明完整 / 与 IP 库比对 / 文件安全 | 疑似侵权 → 冻结 + 人工复核 | ip |
| ④ 组装完整性 | GameConfig JSON Schema / 必填字段 / 资源引用有效 | 缺失 → 编译失败 + 提示 | runtime |
| ⑤ 性能门禁 | **包 ≤10MB / 首屏 ≤2MB / 无外部网络请求** | 超限 → 阻断 + 优化建议 | runtime |
| ⑥ 可玩性自测 | 加载成功 / 启动成功 / 30s 无崩溃 / 结束事件触发 | 失败 → 阻断发布 | runtime |
| ⑦ 发布终审 | 标题/简介/封面/标签/适龄/全链路合规汇总 | 人工或自动决策 | bpm + compliance |
---
## 3. 幂等性(写操作必须幂等)
| 场景 | 问题 | 方案 |
|---|---|---|
| 用户重复点击"生成" | 重复创建生成任务 | 前端防抖 + 后端 **`idempotency_key`(Redis 5min 去重)** |
| MQ 重复消费 | 同一消息处理多次 | 每条消息携带 `message_id`,消费前查 **Redis SET 已处理集合(5min TTL)** |
| 支付回调重复 | 重复入账 | **订单状态机 + 乐观锁(version 字段)**,已完成订单不可重入 |
| 发布重复提交 | 重复创建审核流程 | `project_version` **唯一约束 + 状态前置校验** |
---
## 4. 分布式一致性
**原则:尽量避免分布式事务,用最终一致性 + 补偿替代。**
| 场景 | 涉及模块 | 方案 |
|---|---|---|
| 生成成功 → 写版本 + 扣积分 | aigc → project + pay | 本地事务写版本 + MQ 通知扣积分;扣积分失败 → 补偿(标记版本待支付) |
| 审核通过 → 上架 + 刷新 feed | bpm → project + feed | 审核通过本地事务写状态 + MQ 广播 feed 刷新缓存 |
| 支付成功 → 发货 + 通知 | pay → project/ad + community | 支付本地事务 + MQ 事件扇出(各模块独立消费) |
> **兜底机制(必做)**:定时任务扫描"中间态"超 **5 分钟**的记录 → 自动重试或告警。任何跨模块写都要能被对账扫描发现。
---
## 5. SLO 与可靠性策略
### 5.1 SLO 与 Error Budget
| 服务 | SLO | Error Budget(月) |
|---|---|---|
| 游戏流 API | **99.5%** 可用 | 3.6 小时 |
| AI 生成 | **99%**(允许更高失败率) | 7.2 小时 |
| 支付 | **99.9%** | 43 分钟 |
### 5.2 可靠性策略
| 策略 | 实现 | 落地阶段 |
|---|---|---|
| 熔断降级 | **Sentinel**(Yudao 集成),per-API 规则 | Phase 1 |
| 生成降级 | LLM 不可用 → **确定性 Fallback 生成器**(模板填充) | Phase 2 |
| 游戏加载降级 | 加载超时 **5s → 自动跳过** + 错误记录 + 降权 | Phase 3 |
| 数据库高可用 | MySQL **主从(生产)**;MVP 单节点 + 每日全量备份 + binlog | 上线前 |
| 消息可靠 | RocketMQ **同步刷盘 + 死信队列** + 延迟消息 | Phase 2 |
| 回滚 | 每次部署**保留前 3 个版本镜像,5 分钟内可回退** | CI/CD 内置 |
> 凡涉及外部服务、异步任务、支付、通知、文件、模型调用、远程 API,都必须处理**超时、失败、重试、幂等、补偿**五件事。
---
## 6. 可观测性与日志规范
| 规则 | 硬要求 |
|---|---|
| 格式 | JSON 结构化:`timestamp / level / trace_id / span_id / module / message / context` |
| 级别 | ERROR(需人处理)/ WARN(需关注)/ INFO(关键链路)/ DEBUG(仅 dev) |
| 脱敏 | Token / 密码 / 手机号 / 身份证 **脱敏后输出**(如 `138****1234`),禁止明文落日志 |
| trace_id | **网关入口注入,全链路透传**(含 Dify / OpenGame 调用),调试模式贯穿生成→编译→加载→运行 |
| 保留 | ERROR/WARN **90 天**;INFO **30 天**;DEBUG 仅 dev |
**告警升级链**:
| 级别 | 条件 | 通知方式 | 响应时间 |
|---|---|---|---|
| P0 Critical | 服务不可用 / 数据丢失 / 安全事件 | 电话 + 短信 + 群 | 5 分钟 |
| P1 High | 5xx > 2% / 生成成功率 < 70% / 支付异常 | 短信 + 群 | 15 分钟 |
| P2 Medium | P95 > 800ms / MQ 积压 > 500 / 错误率上升 | 群通知 | 1 小时 |
| P3 Low | 非核心模块降级 / 日志异常增长 | 群通知 | 工作时间 |
---
## 7. SDK 降级铁律(WanxiangGameSDK)
SDK 是平台能力注入 iframe 沙箱游戏的唯一通道,其稳定性直接决定游戏体验,**铁律不可破**:
| 分类 | 模块 | 失败时游戏行为 | 用户感知 |
|---|---|---|---|
| **核心(异步不阻塞)** | Lifecycle / Telemetry / ErrorTrack | 上报失败 → **静默丢弃**,游戏不受影响 | 零感知 |
| **非核心(失败即跳过)** | Ad | 加载失败/超时 → **跳过广告,给玩家免费奖励** | "广告不可用,已赠送奖励" |
| **非核心(失败即跳过)** | Pay | 网络异常 → 提示稍后重试,**不阻断游戏** | toast 提示 |
| **非核心(失败即跳过)** | Social | 排行/好友失败 → 展示本地缓存或空态 | 功能降级,可继续玩 |
| **非核心(失败即跳过)** | Storage | 云存档失败 → **回退 localStorage** | 换设备可能丢进度 |
**编码铁律**:
- Plugin 层每个调用都包裹 `try-catch`,**异常绝不向游戏抛**。
- 每个 Plugin 调用带 **5s 超时**(`Promise.race([fn(), timeout(5000)])`),失败返回 fallback 让游戏继续。
- **游戏主循环(requestAnimationFrame)永远不被 SDK 阻塞**;Core 上报失败静默丢弃(稳定性 > 数据完整性)。
- 广告/支付/社交 SDK 在**宿主侧 iframe 外部**运行(游戏 iframe 无网络权限),游戏只通过抽象 API 触发。
**合规定位**:
- **同意即可用,拒绝即不可用**(与抖音/微信小游戏同模式,法律基础《个保法》第13条第(二)款)。
- **识别未成年人后**:禁止广告展示 + 禁止付费 + 限制时长 + 最小数据采集(实名认证后触发)。
- 隐私政策注册前强制展示,列出 SDK + 第三方 SDK(穿山甲/优量汇/微信支付等)采集的数据类型/用途/保留期;提供数据删除权入口。
---
## 8. 关键技术风险与应对
| # | 风险 | 概率/影响 | 应对 | 降级方案 |
|---|---|---|---|---|
| 1 | LLM 调用不稳定(超时/限流/幻觉) | 高/高 | Dify 内置重试+熔断 + 多供应商切换 | 确定性 Fallback 生成器 |
| 2 | 生成游戏质量不可控 | 高/高 | JSON Schema 强校验 + 可玩性自动测试 + 模板约束 | 质量不达标不入库 |
| 3 | 游戏沙箱逃逸 | 低/极高 | CSP + sandbox + 无网络 + postMessage 校验 | 检测异常立即销毁 iframe |
| 4 | OpenGame 社区停更 | 中/中 | fork 维护 + 核心 pipeline 可自维护 | 退化为纯 Dify + 模板生成 |
| 5 | Dify 版本升级不兼容 | 中/中 | 锁定版本 + 壳层隔离 | 自部署可控 |
| 6 | 广告联盟审核不通过 | 中/高 | 提前申请资质 + 内容合规前置 | 延迟广告上线,先做订阅/B端 |
| 7 | MQ 重复消费致数据不一致 | 中/高 | 消息幂等消费(§3) | 定时任务修复 + 告警 |
| 8 | 分布式事务部分失败 | 中/高 | 最终一致性 + 补偿(§4) | 中间态扫描 + 人工介入 |
| 9 | 第三方 SDK 数据泄露 | 低/极高 | 广告/支付 SDK 宿主侧隔离 + 最小权限 | 紧急下线第三方 SDK |