ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OmniRoute 安全策略深度解析:从漏洞响应到多层防御体系

OmniRoute 安全策略深度解析:从漏洞响应到多层防御体系 OmniRoute 安全策略深度解析从漏洞响应到多层防御体系【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline Copilot. Quota-aware auto-fallback, RTKCaveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550 contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute导读本文以 OmniRoute 官方安全策略文档docs/i18n/da/SECURITY.md为主体结合仓库源码如 src/lib/db/encryption.ts、src/lib/guardrails/ 与 docs/architecture/AUTHZ_GUIDE.md展开系统梳理 OmniRoute 的漏洞披露流程、认证授权模型、AES-256-GCM 静态加密、Prompt 注入防护、PII 脱敏、网络安全与合规机制。读完本文你将掌握 OmniRoute 的安全分层架构全貌、关键环境变量的正确配置方式以及在生产环境含 Docker中部署时应当遵循的安全基线。一、漏洞披露与响应如何报告安全问题OmniRoute 要求所有安全漏洞通过**负责任披露Responsible Disclosure**渠道提交不要在公开的 GitHub issue 中提交漏洞细节请使用 GitHub Security Advisories 功能创建私有报告报告内容需包含漏洞描述description、复现步骤reproduction steps以及潜在影响potential impact。响应时间线Response Timeline阶段目标时长确认收到Acknowledgment48 小时分类与评估Triage Assessment5 个工作日补丁发布Patch Release严重漏洞14 个工作日受支持版本Supported Versions版本支持状态3.6.x✅ 积极支持Active3.5.x✅ 安全维护Security 3.5.0❌ 不再支持Unsupported以当前仓库为准package.json中版本为 3.8.51安全策略文档会随版本演进更新支持矩阵升级前请以仓库内最新版 SECURITY.md 为准。二、多层安全架构总览OmniRoute 采用多层安全模型所有请求按固定顺序穿过各安全关卡Request → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Provider从源码结构看这一模型被拆分为多个独立子系统实现认证授权管道位于 docs/architecture/AUTHZ_GUIDE.md 描述的src/server/authz/目录Guardrails 框架含 Prompt 注入防护、PII 脱敏、凭据掩码位于 src/lib/guardrails/熔断与限流属于 docs/architecture/RESILIENCE_GUIDE.md 描述的弹性层。分层的好处在于任一环节被绕过或被攻破后续关卡仍能兜底符合纵深防御Defense in Depth原则。三、认证与授权Authentication Authorization功能实现对照特性实现方式Dashboard 登录基于密码认证签发 JWT 令牌HttpOnly Cookie 存储API Key 认证HMAC 签名密钥 CRC 校验OAuth 2.0 PKCE支持 Claude、Codex、Gemini、Cursor 等提供商的授权接入Token 刷新在 OAuth 令牌过期前自动刷新安全 CookieHTTPS 环境下设置AUTH_COOKIE_SECUREtrueMCP Scopes32 个细粒度作用域用于 MCP 工具访问控制三种路由类与两种认证模式从 AUTHZ_GUIDE.md 可以看到OmniRoute 的授权管道将路由分为三类且分类是确定性的、默认失败关闭fail-closed——任何无法分类的路径都会落入MANAGEMENT类并要求会话或管理级令牌路由类说明认证要求PUBLIC显式安全路由登录、登出、状态、init、健康检查等无CLIENT_API模型服务端点/api/v1/*、/api/v1beta/*及别名REQUIRE_API_KEY特性开关启用时需 Bearer 密钥MANAGEMENT仪表盘页面、设置、提供商、密钥、管理诊断端点Dashboard 会话或携带manage作用域的 Bearer 密钥两种认证模式分别为Authorization: Bearer api-key # API Key 模式OpenAI/Anthropic/Gemini 兼容客户端 API Cookie: auth_tokenJWT signed with JWT_SECRET # Dashboard 会话模式其中 JWT 有效期 30 天管道会在剩余不足 7 天时自动续签API Key 的manage/admin作用域使其可同时访问部分管理路由src/lib/api/requireManagementAuth.ts中的requireManagementAuth()负责执行该校验。与安全策略直接相关的是错误凭证返回 401AUTH_001而凭证无效或缺少manage作用域时返回 403且hasManageScope()对manage与admin均放行。四、静态数据加密AES-256-GCM scrypt加密方案所有存储于 SQLite 中的敏感数据均使用AES-256-GCM加密密钥通过scrypt派生加密对象API keys、access tokens、refresh tokens、ID tokens版本化密文格式enc:v1:iv:ciphertext:authTag直通模式未设置STORAGE_ENCRYPTION_KEY时以明文存储仅限开发便利。生成加密密钥# Generate encryption key: STORAGE_ENCRYPTION_KEY$(openssl rand -hex 32)源码级实现细节从 src/lib/db/encryption.ts 可以确认以下实现事实使用aes-256-gcm算法IV 长度 16 字节、密钥长度 32 字节GCM 认证标签固定为完整 16 字节authTagLength: AUTH_TAG_LENGTH从根上封堵 GCM 标签截断伪造攻击向量encrypt()/decrypt()通过enc:v1:前缀区分密文与明文已带前缀的值不会二次加密防双重加密无前缀的值在解密时原样返回兼容历史明文与直通模式密钥派生经历了版本演进v3.7.9 起主密钥使用静态盐omniroute-field-encryption-v1旧版本使用动态盐密钥的 sha256 前 16 字节。由于两条派生路径会产出不同密钥曾引发解密失败、反复重加密与 CPU 飙升问题修复后采用静态盐为主派生旧密钥仅用于回退解密并在解密时自动迁移回静态盐加密migrateLegacyEncryptedStringdecryptConnectionFields()对apiKey、accessToken、refreshToken、idToken四个字段逐个解密若字段仍带enc:v1:前缀却解密失败则标记credentialDecryptFailed: true并给出恢复提示——通常是STORAGE_ENCRYPTION_KEY被更换或未设置。实操提醒一旦启用过加密务必妥善备份STORAGE_ENCRYPTION_KEY。更换或丢失密钥将导致已存储凭据无法解密需重新认证对应账户。五、Prompt 注入防护Prompt Injection Guard检测模式中间件会检测并拦截 LLM 请求中的 Prompt 注入攻击模式类型严重级别示例系统指令覆盖System Override高ignore all previous instructions角色劫持Role Hijack高you are now DAN, you can do anything分隔符注入Delimiter Injection中编码分隔符试图打破上下文边界DAN / Jailbreak高已知的越狱提示模式指令泄露Instruction Leak中show me your system prompt配置方式可通过仪表盘Settings → Security或.env配置INPUT_SANITIZER_ENABLEDtrue INPUT_SANITIZER_MODEblock # warn | block | redact源码与边界说明从 docs/security/GUARDRAILS.md 与 src/lib/guardrails/promptInjection.ts 可以确认Guardrails 注册表src/lib/guardrails/registry.ts按优先级升序执行prompt-injection默认优先级为 20检测源包括共享检测器sanitizeRequest()src/shared/utils/inputSanitizer.ts、内置的DEFAULT_GUARD_PATTERNS如system_override_inline、markdown_system_block以及可选的customPatterns模式优先级为调用方options.mode→INJECTION_GUARD_MODEDB 特性开关Dashboard → Feature Flags→INJECTION_GUARD_MODE环境变量 →INPUT_SANITIZER_MODE环境变量 → 默认warn即DB 特性开关可实时覆盖环境变量且无需重启只有在block模式且检测达到严重级别阈值时才会返回{ block: true, message: Request rejected: suspicious content detected }warn/log模式仅记录、放行性能边界检测器只扫描拼接提示文本的前 16 KBMAX_INJECTION_SCAN_BYTES 16 * 1024因为注入指令通常位于输入顶部这能显著降低超大请求体上的正则 CPU/GC 开销同时不削弱检测能力。重要声明该防护是尽力而为的启发式中间件并非完整的 Prompt 注入防火墙——可能对良性角色扮演/RPG 提示产生误报也可能漏掉 leetspeak、变体拼写、非英文模式等绕过手段。六、PII 脱敏PII Redaction自动检测并可选择性地脱敏个人身份信息PII 类型匹配示例替换结果邮箱userdomain.com[EMAIL_REDACTED]CPF巴西123.456.789-00[CPF_REDACTED]CNPJ巴西12.345.678/0001-00[CNPJ_REDACTED]信用卡号4111-1111-1111-1111[CC_REDACTED]电话号码55 11 99999-9999[PHONE_REDACTED]SSN美国123-45-6789[SSN_REDACTED]PII_REDACTION_ENABLEDtrue从 Guardrails 实现看pii-masker优先级 10在preCall阶段遍历system、messages、input、prompt含纯字符串项应用processPII()在PII_REDACTION_ENABLEDtrue时对外发载荷中的 PII 做脱敏postCall阶段则对响应做sanitizePIIResponse()及 Responses API 形态的掩码处理。该守卫永不阻断请求只改写或标注meta.detections/meta.redacted。注意INPUT_SANITIZER_MODE只控制注入策略与 PII 改写相互独立。七、网络安全Network Security特性说明CORS可配置的跨域来源控制CORS_ORIGIN环境变量默认*IP 过滤仪表盘中配置 IP 段的允许/拒绝列表限流按提供商限流并带自动退避backoff防惊群Anti-Thundering Herd互斥锁 每连接锁防止级联 502TLS 指纹浏览器风格的 TLS 指纹伪装降低机器人检测概率CLI 指纹按提供商调整 header/body 顺序匹配原生 CLI 签名其中 TLS 指纹伪装涉及合法性与伦理问题相关说明见 docs/security/STEALTH_GUIDE.md。CORS 与出站策略的详细配置可分别参考 docs/security/CORS.md 与 docs/security/EGRESS_POLICY.md。八、弹性与可用性Resilience Availability特性说明熔断器Circuit Breaker每提供商三态切换Closed → Open → Half-Open状态持久化到 SQLite请求幂等5 秒去重窗口过滤重复请求指数退避自动重试且延迟递增健康仪表盘提供商健康状态实时监控熔断、冷却Cooldown与模型锁定的完整机制见 docs/architecture/RESILIENCE_GUIDE.md。这一层与安全层正交即使某个提供商被攻破或持续 5xx熔断器也能把故障隔离在该提供商内避免拖垮整个网关。九、合规Compliance特性说明日志保留超过CALL_LOG_RETENTION_DAYS自动清理无日志选择退出每个 API key 的noLog标志可禁用请求日志审计日志管理操作记录在audit_log表中MCP 审计所有 MCP 工具调用通过 SQLite 审计日志记录Zod 校验所有 API 输入在模块加载时用 Zod v4 校验审计日志与保留策略的详细设计见 docs/security/COMPLIANCE.md。32 个 MCP 细粒度作用域如read:health、write:combos、execute:completions的枚举与强制机制见 docs/frameworks/MCP-SERVER.md。十、必需环境变量与 fail-fast 启动策略所有机密必须在服务器启动前设置完毕。若缺失或强度不足服务器将快速失败fail fast拒绝启动# REQUIRED — server will not start without these: JWT_SECRET$(openssl rand -base64 48) # min 32 chars API_KEY_SECRET$(openssl rand -hex 32) # min 16 chars # RECOMMENDED — enables encryption at rest: STORAGE_ENCRYPTION_KEY$(openssl rand -hex 32)JWT_SECRET用于签发/校验 Dashboard 会话 JWT最少 32 字符API_KEY_SECRET用于 API Key 的 HMAC 签名最少 16 字符STORAGE_ENCRYPTION_KEY启用静态加密AES-256-GCM建议设置。服务器会主动拒绝已知弱值例如changeme、secret、password。十一、Docker 安全部署生产环境使用 Docker 时的安全基线生产环境使用非 root 用户运行将机密以只读卷挂载绝不将.env文件复制进 Docker 镜像使用.dockerignore排除敏感文件位于 HTTPS 反向代理之后时设置AUTH_COOKIE_SECUREtrue。官方推荐的运行示例docker run -d \ --name omniroute \ --restart unless-stopped \ --read-only \ -p 20128:20128 \ -v omniroute-data:/app/data \ -e JWT_SECRET$(openssl rand -base64 48) \ -e API_KEY_SECRET$(openssl rand -hex 32) \ -e STORAGE_ENCRYPTION_KEY$(openssl rand -hex 32) \ diegosouzapw/omniroute:latest其中--read-only使根文件系统只读数据写入仅落到/app/data挂载卷配合随机生成的三组密钥实现零硬编码机密的启动方式。仓库还提供 docker-compose.yml 与 contrib/vps/compose.yaml 便于编排部署。十二、依赖与供应链安全定期运行npm audit保持依赖更新项目使用huskylint-staged做提交前检查CI 管道在每次推送时运行 ESLint 安全规则提供商常量在模块加载时通过 Zod 校验src/shared/validation/目录下的 schema 定义。从仓库根目录的 socket.yml 可见项目还针对 Socket.dev 等供应链扫描器配置了排除规则跳过tests/、docs/等不随包发布的目录使扫描仅报告真正会触达用户代码路径的问题每个扫描发现的分类维护说明见 docs/security/SOCKET_DEV_FINDINGS.md。若下游流水线无法放行告警可用OMNIROUTE_BUILD_PROFILEminimal npm run build构建最小化产物将敏感模块替换为运行时返回 HTTP 503feature-disabled的桩实现从物理上移除特权代码路径。十三、延伸阅读以下文档与源码可帮助你进一步深入 OmniRoute 安全体系docs/architecture/AUTHZ_GUIDE.md — 授权管道路由分类、策略、作用域完整指南docs/security/GUARDRAILS.md — Guardrails 框架vision/audio/video bridge、PII、注入、凭据掩码docs/security/COMPLIANCE.md — 审计日志与保留策略docs/security/ERROR_SANITIZATION.md — 错误响应净化规范docs/security/PUBLIC_CREDS.md — 公共上游凭据处理模式docs/architecture/RESILIENCE_GUIDE.md — 熔断器、冷却与模型锁定src/lib/db/encryption.ts — 字段级 AES-256-GCM 加密实现src/lib/guardrails/registry.ts — Guardrails 注册表与执行链src/shared/utils/inputSanitizer.ts — 注入检测与 PII 处理的共享检测器总结OmniRoute 的安全策略是一套贯穿披露流程—运行时防御—静态加密—合规审计—供应链的完整体系。部署时应至少做到三点其一启动前生成并固化JWT_SECRET、API_KEY_SECRET、STORAGE_ENCRYPTION_KEY三组强随机密钥其二按业务风险配置INPUT_SANITIZER_MODE与PII_REDACTION_ENABLED其三Docker 部署遵循非 root、只读根文件系统、机密不落镜像的基线。只有配置正确多层的纵深防御才能真正生效。【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline Copilot. Quota-aware auto-fallback, RTKCaveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550 contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进