域名与身份固定
Canonical Origin、认证回调、Passkey RP ID 和控制面 CORS 已形成第一层来源约束。
NEXUS SECURITY DESIGN
Nexus 已有多层控制,但可信代理边界仍未统一。
Nexus 的策略是分层防护,不是统一风控引擎。
能拦住朴素反代,能约束部分高风险链路,也能记录异常。但代理头、封禁执行和生产开关仍各自为政。
Canonical Origin、认证回调、Passkey RP ID 和控制面 CORS 已形成第一层来源约束。
设备授权、Telemetry 和 Docs 各有自己的判断、限流、挑战或封禁逻辑。
不同模块对 Cloudflare 和转发头的优先级不同,风控身份可能被代理头污染。
每个节点都做了一部分工作,但没有一个全局入口同时拥有可信来源、Ban、限流与挑战决策。
来源 IP、代理链和 Cloudflare 上下文必须先被证明,才能进入风险决策。
resolveRequestIp() 身份、路由类型、设备状态和历史行为共同决定允许、挑战、限流或拒绝。
auth + route policy + D1 多个模块自行解析 IP、维护风险状态和执行 Ban,没有共享的判定合同。
3 stores / multiple parsers 状态来自当前代码与仓库声明配置。点击筛选不会改变结论,只缩小检查范围。
| 控制 | 范围 | 状态 | 实际行为 | 边界与缺口 | 源码证据 |
|---|---|---|---|---|---|
| 规范域名重定向 | HTML GET/HEAD | 已实现 | 非规范 Host 的 HTML 导航请求会被 307 重定向到 AUTH_ORIGIN。 | 只处理页面导航,不处理 API,也无法识别主动重写 Host 的服务端反代。 | apps/nexus/server/middleware/canonical-origin.ts:1-38 |
| 认证 Origin 固定 | NextAuth / Passkey | 已实现 | 生产配置真实公网 AUTH_ORIGIN 后,认证回调和 WebAuthn RP ID 固定到官方来源。 | 配置缺失或生产值仍为 localhost 时,会重新信任转发 Host。 | apps/nexus/server/utils/authOrigin.ts:17-30 |
| 控制面 CORS | Admin / Intelligence | 部分实现 | 管理与 Intelligence 控制面只向完全匹配 AUTH_ORIGIN 的浏览器来源开放。 | 普通 API 仍返回通配 Origin,CORS 本身不限制服务端代理。 | apps/nexus/server/middleware/cors.ts:13-49 |
| 设备授权 IP 一致性 | CLI / App 授权 | 已实现 | 设备发起授权和浏览器确认授权的 IP 默认必须一致,不一致时拒绝并审计。 | CLI 可由用户临时允许跨 IP;同一代理出口仍会表现为一致。 | apps/nexus/server/api/app-auth/device/approve.post.ts:82-140 |
| 长期授权信任策略 | Long grant | 已实现 | 长期授权要求设备已信任、地区命中最近成功登录记录、浏览器会话不超过 10 分钟。 | 地区数据仍依赖当前请求地理来源的可信度。 | apps/nexus/server/utils/authStore.ts:2840-2909 |
| 注册 Turnstile | Account signup | 已实现 | 服务端调用 Cloudflare Siteverify,绑定 remoteip,并校验 action 为 signup。 | 生产密钥是否注入不能从仓库配置直接确认。 | apps/nexus/server/utils/turnstile.ts:24-75 |
| 密码登录 Turnstile | Credentials signin | 关键缺口 | 前端要求完成 Turnstile,并把 token 传入登录请求。 | 服务端 Credentials Provider 没有读取或验证 turnstileToken,直接调用接口可绕开。 | apps/nexus/server/api/auth/[...].ts:431-478 |
| Telemetry 自动封禁 | Telemetry APIs | 部分实现 | 1 分钟加权事件数超过 1000 后自动封禁,10 分钟起指数退避,最长 24 小时。 | 只明确接入三个 Telemetry 接口,不是全局请求限流。 | apps/nexus/server/utils/ipSecurityStore.ts:86-213 |
| Docs Challenge / PoW | Docs analytics | 部分实现 | 按 IP + clientId 累积违规,风险 1 要求 Cookie 与 Proof,风险 2 额外要求 PoW。 | 独立于全局风险引擎,并明确留有可信 IP 边界 TODO。 | apps/nexus/server/api/docs/engagement.post.ts:148-217 |
| 人工 IP Ban | Intelligence ban store | 部分实现 | 支持启用、停用、过期和删除 IP Ban。 | 当前明确命中检查只出现在 Docs Assistant,不是全局中间件。 | apps/nexus/server/utils/intelligenceStore.ts:867-878 |
| 管理员控制面保护 | A / B / C channels | 生产配置关闭 | 代码支持管理员 Passkey step-up、紧急令牌和 Cloudflare Access OOB 通道。 | 仓库声明的 production 配置将 control-plane protection 设为 false。 | wrangler.toml:23-36 |
| 防御模式 | NORMAL / ELEVATED / EXTREME | 部分实现 | EXTREME 会限制普通控制面,同时保留紧急、风控和解封路径。 | ELEVATED 当前主要是持久化状态,没有看到请求层行为升级。 | apps/nexus/server/utils/defenseModeController.ts:75-140 |
| 双人复核 | High-risk admin actions | 生产配置关闭 | 降级到 NORMAL、批量解封超过 50 个 Actor、永久 IP Ban 需要第二人确认。 | 代码存在,但仓库声明的 production 配置将 dual control 设为 false。 | apps/nexus/server/utils/adminRiskActions.ts:67-83 |
| 管理员审计哈希链 | Break-glass audit | 已实现 | 每条审计记录串联上一条 Hash,并按小时发出最新 Hash 锚点。 | 依赖 D1 与消息记录链路可用,不能替代外部不可篡改日志。 | apps/nexus/server/utils/adminBreakglassAuditStore.ts:84-170 |
| 统一可信客户端 IP | All risk decisions | 关键缺口 | 部分链路优先 Cloudflare Request,另一些链路优先 X-Forwarded-For。 | 没有统一可信代理跳点和头部清洗策略,代理头可能被客户端伪造。 | apps/nexus/server/utils/authStore.ts:2372-2380 |
控制是否有效,取决于攻击者走哪条路径。
可以打断最朴素的页面镜像,但不会阻止主动重写 Host 的反代。
当前最大基础缺口。身份、限流和地理策略没有共享一个可信解析器。
设备 IP 匹配可以发现来源变化,但无法证明代理后面的真实主体一致。
注册入口服务端校验有效,密码登录仍可绕过前端挑战。
Ban 数据可维护,但执行点没有形成统一入口门禁。
代码设计了 A、B、C 三条管理员路径。生产是否安全,取决于各通道的开关、密钥、身份和审计是否一起生效。
管理员 Session,默认要求 Passkey step-up,再按管理员、IP 与 Actor 三个维度限流。
adminControlPlaneGuard.ts:92-113 10 分钟 HS256 紧急令牌,限定 Scope,绑定设备指纹,JTI 只能消费一次。
adminEmergencyToken.ts:77-141 独立 Service Token 使用常量时间比较,可选 mTLS 和证书 SHA-256 指纹白名单。
adminOobGuard.ts:89-133 这里展示的是版本库中可验证的配置,不替代 Cloudflare Dashboard 实际环境检查。
ADMIN_BREAKGLASS_ENABLEDfalseADMIN_CONTROL_PLANE_PROTECTED_ENABLEDfalseADMIN_DUAL_CONTROL_ENABLEDfalseADMIN_PRESERVE_IN_EXTREME_ENABLEDfalseADMIN_OOB_MTLS_ENABLEDfalseADMIN_DEFAULT_DEFENSE_MODENORMALNUXT_PUBLIC_RISK_CONTROL_ENABLED未声明先修可信输入,再修挑战和执行点,最后启用控制面。顺序反过来会把不可信数据放大成更复杂的策略。
所有身份、限流、地理和审计决策只消费一个规范化结果。
直接调用 Credentials API 不再绕过人机验证和失败速率控制。
Telemetry、Docs 与 Intelligence 不再维护互相独立的执行语义。
高风险管理员操作恢复 step-up、双人复核和可审计紧急通道。
代码控制与 Cloudflare 边缘策略形成可以持续验证的闭环。
已聚焦验证认证 Origin、Turnstile、设备授权风险、紧急令牌、OOB、JTI 防重放和风险动作。7 个测试文件,23 个测试通过。
测试证明现有逻辑按设计运行,不证明可信代理边界、生产环境变量或 Cloudflare 边缘策略已经闭环。