實作Nonce 系統來保護網站完整性
問題:
網站的評分系統,採用雜湊來確保HTTP 請求完整性透過請求重複被利用。攻擊者獲得高分並複製請求詳細資訊來操縱系統。
隨機數字解:
為了對抗這種攻擊,謹慎實施隨機數系統。 Nonce(使用一次的數字)為每個請求提供唯一的值,防止重複使用相同請求。
設定Nonce 系統的通用且安全的方法:
伺服器端函數:
- getNonce() :產生一個隨機數,將其儲存在資料庫中,並將其傳回給客戶端。
- verifyNonce($data, $cnonce, $hash):擷取儲存的隨機數,將其與客戶端提供的隨機數和雜湊值進行比較,並驗證請求。
客戶端功能:
- sendData($data):產生隨機客戶端nonce,建構哈希,並將資料、客戶端nonce和哈希發送到伺服器進行驗證。
實作詳細資料:
- makeRandomString() 函數建立安全的隨機字串或數字。
- 客戶端和伺服器端程式碼中使用的雜湊函數必須匹配。
- 為了防止隨機數重複使用,成功後從資料庫中刪除隨機數至關重要驗證。
- 伺服器必須識別每個請求,以正確識別和儲存隨機數。
隨機數系統範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | getNonce() {
$id = identifyRequest();
$nonce = hash( 'sha512' , makeRandomString());
storeNonce( $id , $nonce );
return $nonce ;
}
verifyNonce( $data , $cnonce , $hash ) {
$id = identifyRequest();
$nonce = getNonce( $id );
removeNonce( $id , $nonce );
$testHash = hash( 'sha512' , $nonce . $cnonce . $data );
return $testHash == $hash ;
}
sendData( $data ) {
$nonce = getNonceFromServer();
$cnonce = hash( 'sha512' , makeRandomString());
$hash = hash( 'sha512' , $nonce . $cnonce . $data );
$args = [ 'data' => $data , 'cnonce' => $cnonce , 'hash' => $hash ];
sendDataToClient( $args );
}
|
登入後複製
透過實施這個隨機數系統,網站可以有效防止重複請求並保持評分繫統的完整性。
以上是如何實施隨機數係統來保護網站完整性並防止重複請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!