这份白皮书面向准备做技术尽调的工程团队、安全合规官、以及自己审计第三方供应商的资深用户。每条主张都对应代码或基础设施配置 —— 不是营销话术。
传输与存储加密
- 所有传输强制 TLS 1.2+(ALB / Cloudflare 层强制 HTTPS,HSTS 由前端代理设置)
- OAuth 刷新令牌和访问令牌使用 AES-256-GCM 加密,独立 96-bit IV(`lib/crypto.ts`)。`tokenVersion` 列允许我们后续轮换加密密钥时按批次重加密
- API key 在数据库存的是 SHA-256 哈希(仅前缀明文存于 `prefix` 列用于 UI 标识)。完整 plaintext 只在创建时返回一次,泄漏 DB 也无法重建 key
- 密码使用 bcrypt 哈希(cost factor 12)
- 密码重置和邮箱验证 token 也存 SHA-256 哈希 + 24h 自动过期 + 单次使用
审计链路
所有账户级安全事件都写入 `audit_events` 表 — 登录 / 登出(含 IP + User-Agent)、密码修改、API key 创建/撤销、OAuth 连接/断开/令牌过期、订阅变更/取消。
- 用户在 /settings#security 实时看到自己最近 10 条事件
- 运营在 /admin 看到全站最近 12 条(仅 ADMIN_EMAILS 允许列表)
- SDK 可通过 `/api/v1/audit-events` 拉取自己的完整历史(支持 `?since` + `?kind=` 过滤)
- 180 天后由 cron 自动清理(`AUDIT_RETENTION_DAYS` env 可调)
- `(userId, createdAt DESC)` 复合索引保证每用户查询 O(log n)
用户自助权利(GDPR / CCPA)
我们故意把 self-serve 路径放在最前面,让用户不用等客服就能行使数据权利:
- 导出 — `GET /api/account/export` 返回完整 JSON 快照(profile + subscriptions + ad_accounts + api_keys 元数据 + 近 90 天 audit_events)。密钥明文永不出现
- 删除 — /settings Danger Zone 一键关闭账户,级联清理所有 FK
- 更正 — /settings 直接编辑显示名、locale、AI provider、邮件订阅
- OAuth 撤销 — /settings 一键断开 + 各平台 console 也可撤
Stripe 幂等性
Stripe 至少一次投递语义意味着同一事件会重试。我们用 `stripe_events` 去重表:INSERT 事件 ID,PK 冲突 = 重复 = 立即 200。处理失败再 DELETE 让 Stripe 下次重试。这避免了订阅状态被双写、订单被双重计费等问题。
CSP 与防御深度
- Content-Security-Policy 当前以 Report-Only 模式运行(`default-src self / frame-ancestors none / upgrade-insecure-requests`),违规上报到 `/api/csp-report`
- X-Frame-Options: DENY(防点击劫持,与 frame-ancestors 双重保险)
- X-Content-Type-Options: nosniff(防 MIME 嗅探)
- Referrer-Policy: strict-origin-when-cross-origin
- Permissions-Policy 关闭 camera/microphone/geolocation/interest-cohort/browsing-topics
- 蜜罐字段保护 contact 表单:机器人填了隐藏 input 就静默丢弃
可观测性与事故响应
- 结构化 JSON 日志(`lib/logger`)发到 CloudWatch
- `captureError` hook 中央化错误捕获,可通过 `SENTRY_DSN` + `globalThis.__sentry` 转发到 Sentry(可选,不强依赖)
- `/api/health` 端点支持 ALB / ECS healthcheck(探活 + 数据库 ping)
- /status 页公开服务状态 + 90 天 incident 历史
AI 调用与数据保留
我们用 Anthropic Claude 和 OpenAI 的企业级 API(明确不参与模型训练)。用户可在 /settings 切换 provider 或回退到系统默认。AI 收到的输入仅限当前账户的 mock 广告数据快照 — 永远不发送原始 OAuth 令牌、密码哈希、或其他用户的数据。
路线图与合规
- SOC 2 Type II 审计计划 2026 Q4 启动
- CSP 从 Report-Only 切到强制模式(观察期收完后)
- 可选 SCIM / SAML SSO(企业版)
- 关键事件邮件通知(新设备登录、API key 创建)
看到 bug、漏洞或文档错误?请发邮件至 security@7275.com,我们 24 小时内回复。