improve(dispatch-webhook): 強化輸入驗證與參數邊界防護 #2

Merged
Selig merged 1 commits from tiangong/openclaw-skill:improve/dispatch-webhook-input-guardrails into main 2026-03-13 22:03:26 +08:00
Contributor

改進說明

dispatch-webhook 是跨節點任務派送的底層能力,若輸入參數異常(例如 target 不合法、payload 非物件、timeout/retries 越界)目前會在執行期產生不一致行為,且存在 header 值未淨化的風險。

本次從架構安全與邊界條件角度,補上輸入防護與參數上限,讓 skill 在面對不可信輸入時能「可預期失敗」。

變更內容

  • 新增 validateInput()
    • 驗證 target 僅允許 vps-a | vps-b
    • 驗證 webhookUrl 為有效 URL 且協定僅 http/https
    • 驗證 payload 必須是 JSON object(排除 array/primitive)
  • 新增 clampInt()
    • timeoutMs 限制在 1000~120000,預設 30000
    • retries 限制在 1~5,預設 3
  • 新增 sanitizeTaskId()
    • 移除 CR/LF 並限制 header 長度,避免 header 注入或異常值傳遞
  • 錯誤處理調整:
    • 統一將未知錯誤收斂為 Error 實例,避免非 Error 類型造成判斷不一致

測試建議

  • 正常流程:傳入合法參數,確認可成功送出且返回 accepted
  • 參數邊界:
    • timeoutMs = -1 / 999999,應被限制在區間內
    • retries = 0 / 99,應被限制在 1~5
  • 異常輸入:
    • target = "vps-c"payload = []webhookUrl = "ftp://...",應回覆明確錯誤
  • 安全檢查:
    • payload.task_id\r\n 字元時,header 內容應被淨化

🤖 由 tiangong 自動審查並提交

## 改進說明 `dispatch-webhook` 是跨節點任務派送的底層能力,若輸入參數異常(例如 target 不合法、payload 非物件、timeout/retries 越界)目前會在執行期產生不一致行為,且存在 header 值未淨化的風險。 本次從架構安全與邊界條件角度,補上輸入防護與參數上限,讓 skill 在面對不可信輸入時能「可預期失敗」。 ## 變更內容 - 新增 `validateInput()`: - 驗證 `target` 僅允許 `vps-a | vps-b` - 驗證 `webhookUrl` 為有效 URL 且協定僅 `http/https` - 驗證 `payload` 必須是 JSON object(排除 array/primitive) - 新增 `clampInt()`: - `timeoutMs` 限制在 `1000~120000`,預設 `30000` - `retries` 限制在 `1~5`,預設 `3` - 新增 `sanitizeTaskId()`: - 移除 CR/LF 並限制 header 長度,避免 header 注入或異常值傳遞 - 錯誤處理調整: - 統一將未知錯誤收斂為 `Error` 實例,避免非 Error 類型造成判斷不一致 ## 測試建議 - 正常流程:傳入合法參數,確認可成功送出且返回 accepted - 參數邊界: - `timeoutMs = -1 / 999999`,應被限制在區間內 - `retries = 0 / 99`,應被限制在 `1~5` - 異常輸入: - `target = "vps-c"`、`payload = []`、`webhookUrl = "ftp://..."`,應回覆明確錯誤 - 安全檢查: - `payload.task_id` 含 `\r\n` 字元時,header 內容應被淨化 --- 🤖 由 tiangong 自動審查並提交
tiangong added 1 commit 2026-03-13 15:05:39 +08:00
Selig merged commit da6e932d51 into main 2026-03-13 22:03:26 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Selig/openclaw-skill#2