跳轉到主要內容
當你的應用程式把程式碼送進一個模型——審查它、補全它,或透過一個代理執行它——時,你會想讓模型對風險部分有所警覺,並在同一遍中阻止工作區洩漏密鑰。一個程式碼安全防護欄正是做這件事:它會在上游模型看到單一權杖之前,針對請求執行你的程式碼安全規則。 這是一個聚焦落地頁。完整的防護欄引擎——規則類型、階段、解析、測試沙盒——請見 防護欄參考防護欄總覽

1. 一個程式碼安全防護欄實際做什麼

OrcaRouter 出貨一個你從範本選擇器套用的 code_security 預設家族。每一個都是一條普通的 防護欄 規則——工作區層級、有序、可綁定到任何金鑰——為程式碼調校:

.env / Secret-File Block

.env 風格的密鑰賦值(DATABASE_URL=AWS_SECRET_ACCESS_KEY=API_TOKEN=…)與貼上的多行設定傾印抵達供應商之前封鎖它們。依據賦值語法,而非值。

License Compliance (copyleft)

標記攜帶強 copyleft 標頭的請求——GPL / AGPL / LGPL / SSPL SPDX 標籤或完整授權名稱——這樣審查者就能確認程式碼是否能安全地混入一個寬鬆授權的程式碼庫。僅標記。

GPL/AGPL Provenance (output)

對攜帶 copyleft 來源簽章的模型建議進行輸出階段標記——一個標記,表明模型可能把 copyleft 訓練資料反芻進產生的程式碼中。

Insecure-API Advisory

當提示引用一個高風險匯點——eval( / exec( / os.system( / subprocess.run( / pickle.loads( / child_process.exec(——時,以一則安全公告註記提示。非封鎖。
前三個重用你已經知道的動作——blockflag。Insecure-API Advisory 使用 annotate:它不拒絕或遮罩請求,而是用一則模型在回答前讀到的註記擴增它。同一個原語驅動 CVE/SBOM 裝飾(下方)。
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 預設套用到一個防護欄並綁定到一把金鑰。然後送出呼叫一個危險匯點的程式碼:
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [
      {"role": "user",
       "content": "Refactor this: result = eval(user_supplied_expr)"}
    ]
  }'
請求原封不動地通過——同樣的內容、同樣的模型——但閘道在前面加上一則模型先讀到的安全公告。完成內容回來時已被導向參數化的 API 與輸入驗證,而你的應用程式無需修改程式碼,也無需第二次往返。
Annotate 與其他動作組合。單一防護欄可以遮罩一個密鑰註記同一個請求——文字被遮罩,而一則註記在一遍中被加上。

3. 透過外部掃描器進行 CVE 與 SBOM 裝飾

公告原語可一般化。把一個程式碼安全掃描器連接為一個 外部廠商,它的發現就會搭乘同一條 annotate 路徑:
從請求文字中擷取 import 與 manifest 釘選版本,並把它們與公開的 OSV 漏洞資料庫交叉參照。一個命中會以例如 “requests@2.0.0 has CVE-2014-1830 (HIGH). Fixed in 2.20.0.” 裝飾提示——這樣模型就被告知它被要求使用的一個套件中有一個已知漏洞。免費且免驗證,所以沒有 API 金鑰欄位。預設為 annotate;你可以改為把它設為 flag 或 block。
用你連接任何外部廠商的相同方式連接一個 SBOM(軟體物料清單)或 SAST(靜態分析)掃描器——一個基底 URL 加上憑證,以加密方式儲存並在讀取時遮罩。每個發現都攜帶一個穩定的識別,所以一個你已分流過的發現不會在每個請求上重新觸發。
外部掃描器遵循與每條進階規則相同的**失敗開放(fail-open)**預設:一個掃描器錯誤或逾時會被記錄為遙測,而請求繼續。在漏掉一次掃描就無法接受的政策上,把規則上的 fail_open 設為 false 以失敗關閉。

4. 與密鑰和授權規則配對

一個程式碼安全防護欄很少單獨行動。常見的形狀是一個帶有數條規則的防護欄:
目標規則
阻止貼上的憑證.env / Secret-File Block(block
捕捉行內密鑰值Secrets Blockerblock
把關 copyleft 程式碼License Compliance(flag
導引危險匯點Insecure-API Advisory(annotate
把它們全部新增到一個命名政策,綁定到你程式碼代理的金鑰,那麼每個請求都會被審查——對明確違規封鎖、對判斷性的呼叫註記、其餘標記以供審查。
一個被封鎖的請求會傳回 HTTP 400 guardrail_blocked 且不消耗配額——輸入階段封鎖在計量之前觸發。它也被標記為 skip-retry,所以針對另一個通道重跑同一個提示只會再次封鎖。參見 guardrail-blocked 錯誤

5. 設定它(主控台 + 角色)

這裡的一切都在主控台中設定,而非透過中繼金鑰。管理路由(/api/guardrail/*)以你的工作階段/存取權杖驗證,而非 sk- 中繼金鑰。讀取——列出防護欄與 Matches 動態——對每個工作區成員開放。寫入(建立/編輯/刪除)以及測試沙盒需要 Developer 角色或以上:沙盒可以發出付費的模型呼叫與外向廠商請求,所以它像一個寫入一樣被把關。
1

建立防護欄

在主控台中開啟 Guardrails → New guardrail。分割按鈕會把你帶進範本庫——挑選一個 Code security 預設作為你的起點。
2

自由編輯

預設是種子,不是鎖。調校正規表示式、新增一條 Secrets Blocker 規則、變更一個動作。在你把它綁定到一把金鑰之前,使用 Test 分頁針對樣本文字證明一條規則如你預期地觸發。
3

綁定一把金鑰

在一個 API 金鑰上設定防護欄(guardrail_id),或將它標記為工作區預設值。綁定關係存在於閘道中的金鑰上,所以編輯防護欄會在下次呼叫時切換每一把綁定的金鑰。
發現會落入工作區 Matches 動態(規則類型、動作、階段、詳情)。匹配到的子字串Log raw content 開啟時才會記錄——預設為關閉,隱私保守姿態。參見 日誌與隱私

6. 下一步去哪裡

  • 封鎖密鑰——捕捉請求引數中憑證的配套規則。
  • 動作——深入 block、mask、flag、annotate 與 spotlight。
  • 合規記錄器——保留每個程式碼安全發現的不可變紀錄。
  • 測試與評測——在出貨前證明你的政策捕捉到已知的壞程式碼。
  • 防護欄參考——完整引擎。
  • 保護 AI 代理——程式碼安全防護欄在零信任控制堆疊中的位置。