跳转到内容
Docs

威胁模型

OpenRUM 通过公开 Ingest 接收不可信浏览器遥测,通过 Console/API 为已认证运维人员服务。 Kafka、ClickHouse、PostgreSQL、Redis 和对象存储属于私有依赖;Kubernetes Secret、工作负载身份、 Source Map 和通知渠道凭据是敏感资产。项目 ID 与组织 ID 本身绝不是授权依据。

威胁 主要控制 验证
跨租户读写 仓储查询校验组织成员;未授权资源返回 Not Found 租户隔离与认证测试
Session 窃取 / CSRF Secure HttpOnly、SameSite、绝对/空闲 TTL、同源与双提交 Token Auth/CSRF 测试
Write Key 滥用 Hash Key、Origin Allowlist、轮换/撤销、项目/IP 限制、Payload 上限 Ingest 测试
事件中的隐私与 Secret URL 归一化、敏感 Key 移除、邮箱/Token/JWT/卡号清洗、属性限长 Privacy Fixture
解压/解析耗尽 压缩和原始字节上限、压缩比上限、单 Gzip Member Bomb 测试
未经认证创建账号 默认只有持有有效、未过期、未撤销的邀请链接才能注册(256 位密钥,只存哈希);按来源地址限制注册频率;新账号处于待审批状态,在 Owner 或 Admin 通过之前不能访问任何内容;每个组织最多 50 条有效链接和 200 条待处理申请,链接不能提供 Owner。Instance Owner 可以打开开放注册(默认关闭;修改需要再次验证密码并写入审计) 邀请与注册集成测试、Handler 测试
批量或恶意自助注册(开放注册) 默认关闭;邮箱注册需要邮件服务和已确认的邮箱(一次性 256 位链接,24 小时有效,只存哈希);未确认的账号不能登录,7 天后清理;注册、重发和确认按来源地址限流,同一账号重发每分钟一次;回应从不透露某个邮箱是否已注册,对已存在账号重复注册不会改动其姓名或密码;统一密码规则(至少 8 个字符,含大写、小写和符号)。已接受的风险:有人可以用不属于自己的邮箱发起注册,只有邮箱真正的主人点开邮件里的链接才会生效;外部登录后手填的邮箱不经验证。开放注册允许任何人创建 Organization 和 Project,适合可信网络,并依赖存储压力和限流保护 注册集成测试、密码与页面测试
恶意或超大的头像 上传需要 Session 和 CSRF Token;仅 PNG、512 KB、32–512 像素,服务端解码后重新编码,丢弃元数据和尾部数据;存入私有 Bucket,只向本人和同组织成员提供并带 nosniff;生成头像只接受 CC0 风格和随机种子 头像包、Handler 与存储测试
第三方头像服务看到查看者 生成头像从 api.dicebear.com 加载,不带 Referer,种子随机;首字母和上传图片不产生第三方请求;已写入隐私页 隐私文档
Webhook SSRF 仅 HTTPS、请求与跳转前验证公网 IP、禁用 Proxy、HMAC、加密配置 安全测试
Source Map 篡改 作用域不可变 Key、预期大小/SHA-256、私有 Bucket Artifact 测试
上传令牌滥用 按项目签发并哈希存储、仅能上传和列出、不能删除、可吊销、显示最近使用时间 上传令牌鉴权测试
队列/数据库故障 acks=all 后成功、写入前不提交 Offset、有界重试与背压 Pipeline/Runbook
  • Ingest 返回成功表示 Kafka 已耐久确认信封。
  • 任何 API 仓储都不能只凭项目 ID 访问,必须解析已认证用户的组织成员关系。
  • Secret、Session Token 和签名 URL 不会在一次性展示后被记录或返回;浏览器 DSN 对授权项目用户可见。
  • Webhook 每次请求和跳转都重新验证 DNS,拒绝私网、Loopback、Link-local 和 CGNAT 地址。
  • 自动恢复不得执行破坏性 Schema 回滚、公开 Bucket 或削弱 Kafka 耐久性。

用户自由文本可能包含清洗器无法识别的标识符,运维方应保守配置采集并限制保留期。浏览器 Write Key 本来就是公开的,其保护依赖 Origin 与速率控制而不是保密。关键/高危发现应阻止上线,除非安全负责人 明确接受并记录负责人、到期时间和补偿控制。

Release Alpha · commit local