1. 代码安全防护栏实际做什么
OrcaRouter 提供了一个你从模板选择器应用的code_security
预设家族。每一个都是一条普通的防护栏
规则——工作区级别、有序、可绑定到任意密钥——针对代码做了调优:
.env / Secret-File Block
在
.env 风格的密钥赋值(DATABASE_URL=、
AWS_SECRET_ACCESS_KEY=、API_TOKEN=…)和粘贴的多行配置转储
到达提供商之前拦截它们。依据赋值语法,而不是值。License Compliance (copyleft)
Flag 携带强 copyleft 头的请求——GPL / AGPL / LGPL / SSPL SPDX
标签或完整许可证名称——以便审查者可以确认该代码可以安全地
混入一个宽松许可的代码库。仅 flag。
GPL/AGPL Provenance (output)
在携带 copyleft 来源签名的模型建议上的输出阶段 flag——一个
标记,表明模型可能把 copyleft 训练数据回吐进了生成的代码。
Insecure-API Advisory
当提示词引用一个高风险 sink——
eval( / exec( / os.system(
/ subprocess.run( / pickle.loads( / child_process.exec(——时,
用一条安全警示annotate提示词。非拦截。code_security 预设是确定性的——纯正则,无网络调用,在热路径上
安全。联网的扫描器(CVE 查询、SBOM、SAST)是单独的外部连接,
而不是预设。参见 §3。2. Annotate——在不改变流量的情况下警告模型
你在防护栏上配置的动作是 block(拒绝调用,HTTP 400)、 mask(脱敏匹配项)和 flag(仅记录)。代码安全在底层增加了 第四种行为:annotate,它既不拦截也不脱敏。当一条 annotate 规则匹配时,网关记录一条简短的注释,中继把它作为一条系统警示 注入上游——因此模型在它回答之前被告知,例如,“this request references a high-risk API (code eval, shell execution, or unsafe deserialization); prefer safer alternatives”。用户的文本从不被 拒绝,也从不被改写。一个具体示例
把 Insecure-API Advisory 预设应用到一个防护栏并把它绑定到 一个密钥。然后发送调用一个危险 sink 的代码:3. 通过外部扫描器进行 CVE 和 SBOM 装饰
警示原语可以泛化。把一个代码安全扫描器作为 外部供应商连接,它的 发现就沿着同样的 annotate 路径流转:依赖 CVE 查询(OSV)
依赖 CVE 查询(OSV)
从请求文本中提取导入和清单 pin,并将它们与公开的 OSV 漏洞
数据库交叉引用。一次命中会用例如 “requests@2.0.0 has
CVE-2014-1830 (HIGH). Fixed in 2.20.0.” 装饰提示词——因此模型
被告知它被要求使用的一个包中的一个已知漏洞。免费且免鉴权,
因此没有 API-key 字段。默认为 annotate;你可以改为把它
设为 flag 或 block。
SBOM 和 SAST 扫描器
SBOM 和 SAST 扫描器
像连接任何外部供应商一样连接一个 SBOM(软件物料清单)或 SAST
(静态分析)扫描器——一个 base URL 加凭证,加密存储并在读取
时屏蔽。每个发现都带有一个稳定的身份,因此一个你已经分诊过的
发现不会在每个请求上重新触发。
fail_open 设为 false 以故障关闭。
4. 与密钥和许可证规则配对
代码安全防护栏很少单独运行。常见形态是一个带几条规则的防护栏:| 目标 | 规则 |
|---|---|
| 阻止粘贴的凭证 | .env / Secret-File Block(block) |
| 捕获内联密钥值 | Secrets Blocker(block) |
| 把关 copyleft 代码 | License Compliance(flag) |
| 引导危险 sink | Insecure-API Advisory(annotate) |
5. 配置它(控制台 + 角色)
这里的一切都在控制台中配置,而不是通过中继密钥。管理路由 (/api/guardrail/*)用你的会话 / 访问令牌鉴权,而不是 sk-
中继密钥。读取——列出防护栏和 Matches 信息流——对每个工作区
成员开放。写入(创建 / 编辑 / 删除)以及测试沙箱需要
Developer 角色或以上:沙箱可以触发付费模型调用和出站供应商
请求,因此它像写入一样被门控。
发现落入工作区 Matches 信息流(规则类型、动作、阶段、详情)。
匹配的子串仅在开启 Log raw content 时才记录——默认关闭,
隐私保守的姿态。参见
日志与隐私。
