如何使用Nonces 保護Web 請求
問題
用戶找到了利用網站評分系統的請求驗證系統的方法:複製高價值的HTTP 請求。這會損害系統的完整性和可靠性。
解決方案:實現 Nonce 系統
Nonce(使用一次的數字)是透過確保特定請求不被執行來防止請求重播攻擊的值。之前做的。這是實現隨機數係統的常見且安全的方法:
伺服器端隨機數產生和驗證
getNonce()函數
- 識別發出請求的客戶端(例如,透過使用者名稱、會話)。
- 使用安全雜湊產生隨機數字函數(例如 SHA512)。
- 將隨機數儲存在與客戶端 ID 關聯的資料庫中。
- 將隨機數傳回給客戶端。
verifyNonce() 函數
- 為客戶端取得先前儲存的nonce ID.
- 從資料庫中刪除隨機數(以防止其重複使用)。
- 使用客戶端提供的隨機數 (cnonce)、請求資料和秘密鹽來產生雜湊.
- 將產生的雜湊值與客戶端提供的雜湊值進行比較。
- 如果雜湊值匹配,則傳回true,表示有效nonce.
客戶端Nonce 用法
sendData() 函數
- 使用getNonce 從伺服器擷取nonce () 函數。
- 使用安全雜湊產生客戶端特定的隨機數 (cnonce)函數。
- 連線伺服器隨機數、客戶端隨機數和請求資料。
- 根據連接值產生哈希。
- 將請求傳送到伺服器,包括資料、 cnonce 和 hash。
安全注意事項
- 隨機隨機數產生: makeRandomString() 函數應產生高度不可預測的隨機數以增強安全性。
- 安全雜湊函數: 利用強大的雜湊函數(如 SHA512 或 bcrypt)進行與隨機數相關的雜湊計算。
- 每個請求單次使用: Nonce 只能使用一次並從儲存中刪除以防止重播攻擊。