重送攻擊防禦

概念

重送攻擊防禦

定義

Replay Attack Defense,防止攻擊者截取合法請求後重複發送的安全機制。核心手段是在請求中加入時間戳,接收方驗證時間戳是否在允許範圍內。

關鍵數據點(附來源)

  • 時間戳與伺服器當前時間差超過 5 分鐘即拒絕。(api-security-design-connection-key)
  • 時間戳綁入簽章(Hash),攻擊者無法單獨修改時間戳而不破壞簽章。(api-security-design-connection-key)
  • 5 分鐘的容許範圍考慮了伺服器時間差,金流業者做法也類似。(api-security-design-connection-key)
  • 一次性 nonce 補上時間窗口:LINE 登入中繼站在發起 OAuth 時產生 nonce 寫入 KV(600 秒 TTL),callback 消費一次即刪,同一組 nonce 用第二次就查不到。(line-login-relay-cloudflare-workers)
  • 兩層各補各的:時間戳限制「多久以內有效」,nonce 限制「只能用一次」,單靠時間戳的窗口內重送靠 nonce 擋。(line-login-relay-cloudflare-workers)
  • OAuth callback 是無 nonce 的 top-level GET 請求,屬於重放與 CSRF 的高風險入口,比一般 API 更需要這兩層疊加。(line-login-relay-cloudflare-workers)

前提與局限性

  • 依賴兩端伺服器的 NTP 時間同步。
  • 5 分鐘視窗內的重送仍可成功,若需更強防護可搭配 nonce(一次性隨機值)。 已有實作證據:見上方 line-login-relay-cloudflare-workers 的 KV nonce 做法。
  • nonce 方案本身需要一個共享的短期儲存,且該儲存的一致性模型要能保證「刪除後立刻讀不到」,否則一次性保證會漏。
  • 時間嚴重漂移時,合法請求也會被拒。

衝突標記

(無)

關聯概念

  • [[請求簽章]]
  • [[API 金鑰管理]]
  • [[HMAC 驗證]]
  • [[一對多信任邊界]]