本地安全要求
- 規範性
- 草案 1.0
- 更新於
- 檢視 Markdown
10.1 基線
「只監聽 localhost」並不等於絕對安全:惡意網頁仍可能嘗試存取本機連線埠。因此 LMSP 組合使用多項措施。
- 服務預設必須繫結回送位址。除非啟用了區域網路模式(第 10.5 節),否則不得監聽
0.0.0.0或任何其他非回送位址。 - 首次執行時,服務應生成高強度的隨機服務金鑰,並使用它(而不是任何內建的預設值)來簽發和驗證權杖。
- 對核心介面的每個請求都必須攜帶有效的 Bearer Token,第 4.2 節列出的引導介面除外。僅僅來自回送位址,永遠不足以透過驗證。
10.2 配對與權杖
客戶端透過本機配對碼獲得屬於自己的 Bearer Token。使用者以服務提供的任意方式讓服務顯示配對碼,客戶端再提交該配對碼:
POST /lmsp/v1/pair
Content-Type: application/json
{
"client_name": "example-client",
"pairing_code": "K7QD-4M2X",
"scopes": ["inference"]
}
| 請求欄位 | 含義 |
|---|---|
client_name |
客戶端的顯示名稱,會展示給使用者。 |
pairing_code |
使用者從服務獲得的配對碼。 |
scopes |
可選,請求的許可權範圍列表。預設為 ["inference"]。 |
服務以權杖作答。token_type 始終為 Bearer:
{
"client_id": "cli_01J8MAT3W6X9B2D5F8H1K4N7QZ",
"access_token": "lmsp_example_3f9a1c52e7d84b60",
"token_type": "Bearer",
"scopes": ["inference"]
}
此後客戶端在每個請求中都傳送 Authorization: Bearer <token>。
- 配對碼必須只能使用一次,並且應在 5 分鐘內過期。它應至少包含 40 位元熵。服務必須對失敗的嘗試限制速率。錯誤或過期的配對碼回傳
401和unauthorized。 - 權杖按客戶端相互獨立,因此使用者可以撤銷某個客戶端而不影響其他客戶端。服務應允許使用者列出並撤銷已配對的客戶端。
- 客戶端應把權杖儲存在作業系統鑰匙圈或認證管理員中。服務應只儲存每個權杖的雜湊。
- 權杖缺失、無效或已被撤銷時,回傳
401、unauthorized和WWW-Authenticate: Bearer回應標頭。權杖有效但缺少介面所需的許可權範圍時,回傳403和forbidden。
10.3 許可權範圍
許可權被拆分為相互獨立的範圍。下載模型、刪除模型和執行工具,永遠不會附帶在 inference 範圍之內。
| 範圍 | 允許的操作 |
|---|---|
inference |
讀取模型目錄,建立回應和任務,讀取並取消該客戶端自己的任務。 |
models:manage |
載入和解除安裝模型。 |
models:install |
預留。下載和刪除模型。 |
tools:execute |
預留。在伺服端執行工具。 |
任務和已儲存的回應屬於建立它們的客戶端。對於來自其他客戶端的請求,服務應當作它們不存在來應答(task_not_found 或 response_not_found)。
10.4 瀏覽器與網路防護
- 服務預設必須拒絕跨域的瀏覽器請求,只允許明確設定的
Origin值。帶有其他Origin的請求回傳403和forbidden。 - 當某個來源被允許時,服務回應其 CORS 預檢請求,並在
Access-Control-Allow-Origin中給出確切的來源,絕不使用*。 - 服務必須驗證
Host請求標頭,以防止 DNS Rebinding。服務只接受自己所服務的主機名稱:回送名稱和位址,加上為區域網路模式設定的名稱。其他任何取值都回傳403和forbidden。
10.5 區域網路模式
區域網路模式指監聽回送位址之外的位址。
- 除非使用者明確開啟,服務不得啟用區域網路模式。
- 在區域網路模式下,服務必須要求驗證,並且應同時啟用 TLS。除非使用者明確允許,客戶端不應透過明文 HTTP 向非回送位址傳送權杖。
- 只有在區域網路模式下,且使用者也開啟了「區域網路發現」時,才允許 mDNS 廣播(第 3.2 節)。
10.6 日誌與隱私
- 模型路徑、日誌、提示詞和生成內容不得出現在 mDNS 廣播中。
- 預設情況下,服務應只記錄中繼資料(時間、介面、狀態碼、id、token 數量和耗時),不應記錄完整的提示詞和生成內容。
- 健康檢查回應和錯誤詳情不得包含模型路徑、提示詞、存取權杖等敏感資訊。