UDI Lens

安全檢查清單

上線前請逐項確認。

端點

  • 只接受 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 簽署的訂閱交易驗證身分