安全檢查清單
上線前請逐項確認。
端點
- 只接受 HTTPS,憑證由公開 CA 簽發且未過期
- 以原始 body 驗證
webhook-signature,使用常數時間比較 - 拒絕
webhook-timestamp與現在相差超過 5 分鐘的請求 - 以
webhook-id去重,資料庫設唯一索引 - 驗章失敗回
401,不要回傳錯誤細節 - 先回
2xx再非同步處理,避免逾時造成重送 - 限制請求大小(建議 256 KB)
金鑰
- API Key 存放在祕密管理系統,不寫進程式碼、不進版控、不印在日誌
- 只有需要的服務能讀取金鑰
- 疑似外洩時立即在 App 或入口網站輪替;舊金鑰 24 小時後失效
- 定期輪替(建議每年一次)
資料
- 把事件內容當成不可信輸入:驗證長度與格式後再寫入資料庫,使用參數化查詢
- 不要直接把事件內容用於臨床判斷;效期等資訊請以實體標籤為準
-
endpoint.test事件不要寫入正式資料
來源驗證
我們以簽章證明請求來源。Cloudflare 的出口 IP 為共用網段,不建議以 IP 白名單作為唯一防護。若貴單位政策要求網路層驗證,請聯絡我們討論 mTLS 用戶端憑證或固定出口 IP 方案。
我們這端的保護
- 只轉送到公開網際網路位址;網址解析到私有、保留或雲端中繼資料位址一律拒絕
- 不跟隨重新導向,回應內容只讀取前 4 KB
- 掃描內容送達即刪除,金鑰以 AES-256-GCM 加密儲存
- App 端以 Apple App Attest 與 App Store 簽署的訂閱交易驗證身分