拓冰建站拓冰建站
首页 / 资讯中心 / 正文

OmniRoute 安全模型深度解读:从漏洞披露到 AES-256-GCM 加密与 Guardrails 防护体系

OmniRoute 安全模型深度解读从漏洞披露到 AES-256-GCM 加密与 Guardrails 防护体系【免费下载链接】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 的官方安全策略SECURITY.md 及其多语言版本如 docs/i18n/hi/SECURITY.md展开系统梳理其安全架构、认证授权、静止数据加密、Prompt 注入防护、PII 脱敏、熔断与合规等核心机制。读完本文你将掌握 OmniRoute 的完整安全边界与纵深防御链路并能据此正确配置环境变量、落地 Docker 安全基线、评估 LLM 网关在真实部署中的风险暴露面。漏洞披露流程Reporting VulnerabilitiesOmniRoute 对安全漏洞采用负责任披露Responsible Disclosure流程明确规定禁止在公开的 GitHub Issue 中提交漏洞细节通过 GitHub Security Advisories 渠道私下提交报告内容需包含漏洞描述description、复现步骤reproduction steps和潜在影响potential impact。从项目 SECURITY.md 的披露策略看这是典型的先私密沟通、后公开修复流程配合下方的响应时间线可以预期漏洞从上报到修复的完整周期。响应时间线Response Timeline阶段目标时间确认收到Acknowledgment48 小时分类与评估Triage Assessment5 个工作日补丁发布Patch Release严重漏洞14 个工作日这意味着严重漏洞从披露到发布修复补丁的最长承诺周期约为两周配套的分级支持策略则保障了旧版本在过渡期的安全性。支持的版本Supported Versions版本支持状态3.6.x✅ 活跃支持Active3.5.x✅ 安全修复支持Security 3.5.0❌ 不再支持需要说明的是版本支持状态会随发布节奏滚动更新——仓库根目录的最新 SECURITY.md 已把活跃支持版本推进到 3.8.x建议以根文档为准。安全架构总览多层级纵深防御OmniRoute 采用多层级multi-layered安全模型请求从进入到出站要依次经过完整的安全管线Request → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Provider结合仓库根目录 SECURITY.md 的更新描述管线可以进一步细化为Request → CORS → Authz pipeline (classify → policies → enforce) → Guardrails (PII masker, prompt injection, vision bridge) → Rate Limiter → Circuit Breaker → Cooldown → Model Lockout → Provider从这条链路可以看到安全控制被拆分为入口边界CORS→ 身份认证API Key→ 授权管道Authz→ 内容防护Guardrails→ 流量治理限流/熔断→ 出站保护Provider多个相互独立的阶段任何单层失效都不会直接导致整体沦陷。认证与授权Authentication Authorization特性实现方式Dashboard 登录基于密码的认证使用 JWT TokenHttpOnly Cookie 承载API Key 认证HMAC 签名密钥 CRC 校验OAuth 2.0 PKCE面向 Claude、Codex、Gemini、Cursor 等提供商的第三方认证Token 刷新OAuth Token 到期前自动刷新安全 Cookie在 HTTPS 环境设置AUTH_COOKIE_SECUREtrueMCP Scopes32 个细粒度作用域用于 MCP 工具访问控制根目录 SECURITY.md 还补充了更细的授权模型Authz Pipeline路由按 PUBLIC / CLIENT_API / MANAGEMENT 三级分类经 classify → policies → enforce 三阶段处理详见 docs/architecture/AUTHZ_GUIDE.mdRoute Guard Tiers管理路由采用三层模型LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT详见 docs/security/ROUTE_GUARD_TIERS.mdManage-Scope MCP远程/api/mcp/*访问由带managescope 的 API Key 门禁/api/cli-tools/runtime/*保持严格回环loopback访问MCP Scopes 详情32 个细粒度作用域如read:health、write:combos、execute:completions等参见 docs/frameworks/MCP-SERVER.md。静止数据加密AES-256-GCM scrypt 密钥派生所有存储在 SQLite 中的敏感数据API Keys、访问令牌、刷新令牌、ID 令牌都使用AES-256-GCM加密密钥由scrypt派生采用带版本号的存储格式enc:v1:iv:ciphertext:authTag当未设置STORAGE_ENCRYPTION_KEY时系统进入 Passthrough明文模式仅用于开发便利。生成加密密钥的命令为STORAGE_ENCRYPTION_KEY$(openssl rand -hex 32)从源码 src/lib/db/encryption.ts 可以看到字段级加密的完整实现细节算法参数ALGORITHM aes-256-gcmIV 长度 16 字节、密钥长度 32 字节、GCM 认证标签固定为完整 16 字节AUTH_TAG_LENGTH 16并在createDecipheriv中显式传入authTagLength从而从根上封堵 GCM 标签截断伪造向量对应 Semgrepgcm-no-tag-length规则密钥派生主密钥使用静态盐omniroute-field-encryption-v1通过scryptSync派生。旧版本曾使用动态盐sha256(secret)的前 16 字节派生导致健康检查路径与主 API 路径派生出不同的密钥、出现循环解密失败。v3.7.9 起以静态盐为主派生并保留旧密钥用于向后兼容解密migrateLegacyEncryptedString()会在解密时自动把旧密文重加密迁移到静态盐密钥双密钥降级解密decrypt()先尝试静态盐主密钥失败后再尝试旧版动态盐密钥命中旧密钥的值会被标记下一次encrypt()调用即自动重加密迁移凭据失败识别looksEncrypted()通过enc:v1:前缀区分凭据存在但无法解密密钥变更/缺失与凭据确实为空避免把解密失败的 null 强行转成空串后向上游发送空 Bearer 请求防日志刷屏对损坏密文的解密失败日志按provider connection 失败字段 密文指纹去重只记录一次可操作的恢复提示。值得注意的恢复提示RECOVERY_HINT当出现凭据解密失败时官方给出的恢复路径是重新认证该账号或核验STORAGE_ENCRYPTION_KEY是否与存储时一致——这提醒运维人员加密密钥必须持久化备份否则所有已存凭据将无法恢复。Guardrails 框架可热加载的防护注册表从根目录 SECURITY.md 可知OmniRoute 内置了一个可热加载的 guardrails 注册表src/lib/guardrails/按优先级顺序执行Guardrail优先级用途vision-bridge5为不支持视觉的模型桥接图像感知描述对图片 URL 做 SSRF 防护pii-masker10调用前 调用后的 PII 脱敏邮箱、电话、CPF、CNPJ、信用卡、SSNprompt-injection20检测覆盖指令、角色劫持、越狱、泄露等注入模式在 src/lib/guardrails/registry.ts 中GuardrailRegistry维护一个按priority升序排序的 guardrail 列表每个 guardrail 暴露preCall请求前置钩子与postCall响应后置钩子两类能力执行结果分blocked/modified/passed三种状态自定义 guardrail 通过registerGuardrail(new MyGuardrail())注册同名注册会被替换该模型是fail-open设计——guardrail 抛出的异常不会阻断流量日志会记录failed open避免安全组件自身成为可用性单点支持逐请求关闭通过x-omniroute-disabled-guardrails请求头或 API Key 配置、请求体disabledGuardrails字段按名称选择性跳过框架协议约定见 docs/security/GUARDRAILS.md。Prompt 注入防护Prompt Injection GuardPrompt 注入防护是面向 LLM 请求的内容安全中间件覆盖以下模式模式类型严重级别示例系统指令覆盖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编码绕过Encoding Evasion中base64/rot13/hex 解码后叠加指令关键词通过 DashboardSettings → Security或.env配置INPUT_SANITIZER_ENABLEDtrue INPUT_SANITIZER_MODEblock # warn | block | redact需要注意的是官方对该机制有清醒的边界声明它属于尽力而为的启发式中间件并非完整的 Prompt 注入防火墙既可能对良性 persona/RPG 提示产生误报也可能对 leetspeak、空格变形、非英语模式漏报。根目录 SECURITY.md 进一步澄清了策略细节只有High级别检测在block模式下才会被拦截Medium 级家族仅记录日志、绝不拦截redact是历史遗留模式且不会剥离注入文本推荐使用warn或block新增阈值控制项INPUT_SANITIZER_BLOCK_THRESHOLDhigh默认 high可设为 medium/low用于决定 block 模式按哪个级别起拦。从实现看src/lib/guardrails/promptInjection.ts默认防护模式内置了system_override_inline\bsystem\s*:\s*override\b与markdown_system_block 代码块 system 标记等正则模式并支持通过customPatterns选项注入自定义模式支持字符串、正则或带名称/级别的模式对象检测结果按严重级别累计、由共享的shouldBlockDetections统一裁决相关工具函数位于 src/shared/utils/inputSanitizer.ts 与 src/shared/utils/injectionSeverity.ts。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根目录 SECURITY.md 补充了两点PII_REDACTION_ENABLED只控制请求侧PII 改写与INPUT_SANITIZER_MODE只管注入策略相互独立可选PII_RESPONSE_SANITIZATIONtrue对返回给客户端的 Provider 响应做 PII 脱敏。实现层面src/lib/guardrails/piiMasker.tspii-masker会深度递归 LLM 请求结构对system、消息列表content/text字段、input[]数组中的字符串元素逐一执行processPII()且所有改写基于深拷贝JSON.parse(JSON.stringify(payload))保证不污染原始请求对象。网络安全Network Security特性说明CORS可配置的来源控制根文档已升级为CORS_ALLOWED_ORIGINS显式白名单CORS_ORIGIN为历史变量默认*详见 docs/security/CORS.mdIP 过滤Dashboard 内配置 IP 范围白名单/黑名单限流按 Provider 维度限流并自动退避防惊群Anti-Thundering HerdMutex 按连接加锁防止级联 502TLS 指纹模拟浏览器 TLS 指纹以降低机器人检测概率CLI 指纹按 Provider 定制 header/body 顺序以匹配原生 CLI 签名需要提醒的是TLS 指纹伪装涉及规避反爬/风控手段使用前请阅读 docs/security/STEALTH_GUIDE.md 中的法律与伦理说明。弹性与可用性Resilience Availability特性说明熔断器Circuit Breaker按 Provider 三态Closed → Open → Half-Open熔断状态持久化于 SQLite请求幂等5 秒去重窗口拦截重复请求指数退避自动重试且延迟递增健康看板Provider 健康状态实时监控熔断、冷却Cooldown与模型锁定的完整设计可参考 docs/architecture/RESILIENCE_GUIDE.md。合规Compliance特性说明日志保留按CALL_LOG_RETENTION_DAYS自动清理无日志退出每个 API Key 的noLog标志可关闭请求日志审计日志管理操作记录在audit_log表MCP 审计所有 MCP 工具调用通过 SQLite 审计日志记录Zod 校验所有 API 输入在模块加载时用 Zod v4 schema 校验审计日志与保留策略的落地细节可参考 docs/security/COMPLIANCE.md。必需环境变量Required Environment Variables所有机密必须在服务器启动前配置完成缺失或弱密钥时服务会快速失败fail fast# REQUIRED — 缺少以下变量服务将无法启动 JWT_SECRET$(openssl rand -base64 48) # 最短 32 字符 API_KEY_SECRET$(openssl rand -hex 32) # 最短 16 字符 # RECOMMENDED — 开启静止数据加密 STORAGE_ENCRYPTION_KEY$(openssl rand -hex 32)服务器会主动拒绝已知弱值如changeme、secret、password。Docker 安全基线生产环境部署建议遵循以下规则使用非 root 用户运行密钥以只读卷read-only volumes挂载切勿把.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配合只读卷挂载把运行期写盘面压缩到最小是典型的加固容器写法。依赖管理与供应链安全官方安全策略对依赖管理提出明确要求定期执行npm audit根文档补充npm run audit:deps覆盖主项目与 electron 两套依赖保持依赖更新项目使用huskylint-staged作为提交前检查lint-staged check-docs-sync check:any-budget:t11CI 流水线在每次推送时运行 ESLint 安全规则no-eval、no-implied-eval、no-new-func均为 error 级别Provider 常量在模块加载时经 Zod 校验——旧版指向src/shared/validation/providerSchema.ts根文档更新为 src/shared/validation/schemas.ts优先采用默认安全的库dompurify/isomorphic-dompurifyXSS、joseJWT、better-sqlite3参数化查询无 SQLi 风险、bcryptjs密码哈希。硬性安全规则Hard Security Rules根目录 SECURITY.md 还定义了由工具链与评审者共同强制的 11 条硬规则这是理解项目安全设计哲学的关键绝不提交机密——.env被 gitignore.env.example仅作模板不含字面量只含注释参见 docs/security/PUBLIC_CREDS.md绝不用eval()/new Function()或隐式 eval——ESLint 强制绝不绕过 Husky 钩子--no-verify、--no-gpg-sign除非获得运维明确批准路由中绝不写裸 SQL——一律经 src/lib/db/ 参数化访问一律用 Zod 校验输入——src/shared/validation/schemas.ts一律净化上游 headers——黑名单见src/shared/constants/upstreamHeaders.ts凭据静止加密——AES-256-GCM见 src/lib/db/encryption.ts公开 OAuth 标识符一律经resolvePublicCred()——绝不在源码中硬编码AIza…/GOCSPX-…/…apps.googleusercontent.com字面量错误响应一律经buildErrorBody()/sanitizeErrorMessage()——绝不在 HTTP / SSE / executor / MCP 响应体中泄露原始err.stack/err.message详见 docs/security/ERROR_SANITIZATION.mdexec()/spawn()的运行时值通过env选项传入——绝不把外部路径或不可信值字符串插值进 shell 脚本参考src/mitm/cert/install.ts::updateNssDatabases优先使用默认安全的库Helmet.js、DOMPurify、ssrf-req-filter、safe-regex、Google Tink 等在自己造轮子之前先选择成熟方案。供应链扫描发现与缓解Supply-chain Scanner Findings根目录 SECURITY.md 特别说明了一个容易被误判的事实发布的omniroutenpm 制品打包了 Next.jsoutput: standalone构建因此每个路由处理器——包括文档化的特权功能MITM、Zed 导入、Cloud Sync、嵌入式服务监管——都会进入.next/server/*.js压缩 chunk。启发式供应链扫描器常把这些 chunk 与恶意软件签名模式匹配。针对这一误报源仓库提供了双层处置扫描器配置位于根目录 socket.ymlSocket.dev GitHub App 格式 v2显式排除tests/、_tasks/、docs/等不随包发布的目录使扫描只聚焦真正到达用户的代码路径每个发现类别都维护逐条维护者证明attestation见 docs/security/SOCKET_DEV_FINDINGS.md并在每个被标记函数点留有SECURITY-AUDITOR-NOTE:注释块与之对应。若下游流水线无法放松告警官方提供最小化构建逃生通道使用OMNIROUTE_BUILD_PROFILEminimal npm run build构建四个敏感模块会被替换为运行时返回 HTTP 503feature-disabled的桩stub从而在物理层面从 bundle 中移除特权代码路径。结语安全是分层的不是单点的从漏洞披露 SLA、三层授权模型、AES-256-GCM 字段级加密到 fail-open 的 Guardrails 框架、硬性安全规则与供应链扫描处置OmniRoute 把安全做成了贯穿配置、编码规范、构建与部署全链路的工程实践。对使用者而言最值得立即行动的三个检查点是务必设置并备份STORAGE_ENCRYPTION_KEY、为JWT_SECRET与API_KEY_SECRET使用随机强值、在 HTTPS 环境开启AUTH_COOKIE_SECURE。进一步深入可继续阅读仓库内的 docs/security/GUARDRAILS.md、docs/architecture/AUTHZ_GUIDE.md、docs/security/ERROR_SANITIZATION.md 与 docs/architecture/RESILIENCE_GUIDE.md 等专题文档。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门