重送攻擊防禦
重送攻擊防禦
定義
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 驗證]]
- [[一對多信任邊界]]