NEXUS SECURITY DESIGN

信任边界,
不是反代幻觉。

Nexus 已有多层控制,但可信代理边界仍未统一。

当前判定 规范域名治理已存在。真正的防镜像、可信 IP 与全局风险执行仍未闭环。
当前请求信任边界
AUTH_ORIGIN TRUST
BOUNDARY
PARTIAL
01Internet
02CF Edge
03API
04D1
GAP client-controlled forwarded headers

一句话结论

Nexus 的策略是分层防护,不是统一风控引擎。

能拦住朴素反代,能约束部分高风险链路,也能记录异常。但代理头、封禁执行和生产开关仍各自为政。

已实现

域名与身份固定

Canonical Origin、认证回调、Passkey RP ID 和控制面 CORS 已形成第一层来源约束。

部分实现

行为风控分散

设备授权、Telemetry 和 Docs 各有自己的判断、限流、挑战或封禁逻辑。

关键缺口

可信 IP 未统一

不同模块对 Cloudflare 和转发头的优先级不同,风控身份可能被代理头污染。

当前请求路径

每个节点都做了一部分工作,但没有一个全局入口同时拥有可信来源、Ban、限流与挑战决策。

  1. 01
    Internet客户端或反代
    未证明
  2. 02
    Cloudflare Edge网络与地理上下文
    部分使用
  3. 03
    Canonical OriginHTML 导航 Host 纠正
    有效
  4. 04
    Route ControlsAuth / Docs / Telemetry / Admin
    分散
  5. 05
    D1 State审计、封禁、模式与历史
    持久化

边界外

来源 IP、代理链和 Cloudflare 上下文必须先被证明,才能进入风险决策。

resolveRequestIp()

边界内

身份、路由类型、设备状态和历史行为共同决定允许、挑战、限流或拒绝。

auth + route policy + D1

当前断点

多个模块自行解析 IP、维护风险状态和执行 Ban,没有共享的判定合同。

3 stores / multiple parsers

证据矩阵

状态来自当前代码与仓库声明配置。点击筛选不会改变结论,只缩小检查范围。

显示全部 15 项控制

当前 Nexus 防反代与风险控制实现状态
控制 范围 状态 实际行为 边界与缺口 源码证据
规范域名重定向 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

五条真实攻击路径

控制是否有效,取决于攻击者走哪条路径。

01 简单 Host 透传反代 部分实现
  1. 攻击者域名
  2. 透传 Host
  3. Nexus HTML
  4. 307 官方域名

可以打断最朴素的页面镜像,但不会阻止主动重写 Host 的反代。

02 伪造代理头 关键缺口
  1. 客户端
  2. X-Forwarded-For
  3. 风控 IP
  4. 错误计数或绕过

当前最大基础缺口。身份、限流和地理策略没有共享一个可信解析器。

03 同出口代理授权 部分实现
  1. CLI
  2. 同一代理出口
  3. 浏览器确认
  4. IP 一致

设备 IP 匹配可以发现来源变化,但无法证明代理后面的真实主体一致。

04 自动化密码尝试 关键缺口
  1. 脚本
  2. Credentials API
  3. 忽略前端 Turnstile
  4. 密码校验

注册入口服务端校验有效,密码登录仍可绕过前端挑战。

05 人工 Ban 覆盖不足 部分实现
  1. 风险控制面
  2. IP Ban 表
  3. 单点业务检查
  4. 其他 API 未命中

Ban 数据可维护,但执行点没有形成统一入口门禁。

控制面不是单通道

代码设计了 A、B、C 三条管理员路径。生产是否安全,取决于各通道的开关、密钥、身份和审计是否一起生效。

ASESSION

普通管理员

管理员 Session,默认要求 Passkey step-up,再按管理员、IP 与 Actor 三个维度限流。

  • 20 次/分钟/管理员
  • 60 次/分钟/IP
  • 40 次/分钟/Actor
adminControlPlaneGuard.ts:92-113
BBREAK-GLASS

紧急通道

10 分钟 HS256 紧急令牌,限定 Scope,绑定设备指纹,JTI 只能消费一次。

  • Passkey 或恢复码验证
  • 设备指纹绑定
  • 一次性 JTI 防重放
adminEmergencyToken.ts:77-141
COUT-OF-BAND

Cloudflare Access

独立 Service Token 使用常量时间比较,可选 mTLS 和证书 SHA-256 指纹白名单。

  • Access Client ID / Secret
  • 可选 mTLS
  • 独立 Actor 审计身份
adminOobGuard.ts:89-133
生产配置关闭

高风险动作本应双人复核

  • 防御模式降回 NORMAL
  • 一次解封超过 50 个 Actor
  • 创建永久 IP Ban

仓库声明的生产姿态

这里展示的是版本库中可验证的配置,不替代 Cloudflare Dashboard 实际环境检查。

ADMIN_BREAKGLASS_ENABLEDfalse
ADMIN_CONTROL_PLANE_PROTECTED_ENABLEDfalse
ADMIN_DUAL_CONTROL_ENABLEDfalse
ADMIN_PRESERVE_IN_EXTREME_ENABLEDfalse
ADMIN_OOB_MTLS_ENABLEDfalse
ADMIN_DEFAULT_DEFENSE_MODENORMAL
NUXT_PUBLIC_RISK_CONTROL_ENABLED未声明

整改顺序

先修可信输入,再修挑战和执行点,最后启用控制面。顺序反过来会把不可信数据放大成更复杂的策略。

P0 01

统一可信 IP 解析器

所有身份、限流、地理和审计决策只消费一个规范化结果。

  1. 优先使用 Cloudflare runtime request context。
  2. 只有远端跳点在可信代理白名单内时才读取转发头。
  3. 记录来源类型和可信级别,不把 unknown 当作可信。
  4. 迁移 authStore、ipSecurityStore、requestGeo 和管理员 Actor 生成。
P0 02

服务端强制登录挑战与限流

直接调用 Credentials API 不再绕过人机验证和失败速率控制。

  1. Credentials Provider 验证 Turnstile token 与 login action。
  2. 按 IP、账号标识和设备信号做组合限流。
  3. 统一覆盖密码登录、Magic Link 和邮箱探测入口。
  4. 挑战不可用时 fail-closed,并返回可诊断错误码。
P1 03

统一 Ban 与防御模式执行点

Telemetry、Docs 与 Intelligence 不再维护互相独立的执行语义。

  1. 建立全局风险门禁,按路由类别应用 Ban、限流和挑战。
  2. 定义 NORMAL、ELEVATED、EXTREME 的具体读取与写入策略。
  3. 保留控制面恢复路径,并验证不会把管理员永久锁死。
  4. 迁移历史状态时保留原因、到期时间和审计来源。
P1 04

启用生产控制面保护

高风险管理员操作恢复 step-up、双人复核和可审计紧急通道。

  1. 先配置独立 emergency secret、pepper 和 Cloudflare Access token。
  2. 在 preview 验证 A/B/C 三个通道与 JTI 防重放。
  3. 再启用 protection、dual control 和 EXTREME preservation。
  4. Break-glass 未完成演练前保持关闭。
P2 05

边缘回源与可验证证据

代码控制与 Cloudflare 边缘策略形成可以持续验证的闭环。

  1. 通过 Cloudflare Access、WAF 或等价策略限制敏感入口。
  2. 把边缘规则、Worker 版本和配置状态纳入部署证据。
  3. 建立真实反代、头部伪造、同出口授权和直接 API 自动化 smoke。
  4. 对外页面只发布可公开的结论,不暴露策略密钥和内部日志。

当前证据边界

已聚焦验证认证 Origin、Turnstile、设备授权风险、紧急令牌、OOB、JTI 防重放和风险动作。7 个测试文件,23 个测试通过。

测试证明现有逻辑按设计运行,不证明可信代理边界、生产环境变量或 Cloudflare 边缘策略已经闭环。