重播攻擊,有時稱為演示攻擊,即攻擊者重現以前合法用戶向伺服器所發送的資料以獲取存取權或其它分配給該使用者的權限。
就像密碼嗅探一樣,防止重播攻擊也需要你意識到資料的暴露。為防止重播攻擊,你需要增加攻擊者來取得任何用於取得受限資源的存取權限的資料的難度。這主要要求要避免以下做法:
設定受保護資源永久存取權的資料的使用;
設定受保護資源存取權的資料的暴露(甚至是只提供臨時存取權的數據);
這樣,你應該只使用設定受保護資源臨時存取權的數據,同時你還要盡力避免該資料外洩。這些雖只是一般的指導原則,但它們能為你的運作機制提供指導。
第一個原則據我所知,違反它的頻率已達到了令人恐怖的程度。許多開發人員只注意保護敏感資料暴露,而忽略了用於設定受保護資源永久存取權的資料在使用時引發的風險。
例如,考慮一下用本機腳本計算驗證表單密碼的hash值的情況。這樣密碼的明文不會暴露,暴露的只是它的hash值。這就保護了使用者的原始密碼。這個流程的主要問題是重播漏洞依然如故——攻擊者可以簡單的重播一次合法的驗證過程即可通過驗證,只要用戶密碼是一致的,驗證過程就會成功。
更安全的運作方案、MD5的JavaScript來源檔案以及其它演算法,請看http://www.php.cn/。
類似於第一原則的違反是指定一個cookie以提供對某一資源的永久存取權。例如,請考慮下面的透過設定cookie運作的一個永久存取機制的嘗試:
CODE: <?php $auth = $username . md5($password); setcookie('auth', $cookie); ?>
如果一個未驗證使用者提供了一個驗證cookie,程式會檢查在cookie中的密碼的hash值與存在資料庫中的密碼的hash是否匹配。如果匹配,則用戶驗證通過。
本流程中的問題是該驗證cookie的暴露是一個非常大的風險。如果它被捕獲的話,攻擊者就獲得了永久訪問權。儘管合法用戶的cookie可能會過期,但攻擊者可以每次都提供cookie以供驗證。請看圖7-2中對此情形的圖示。
一個更好的永久登入方案是只使用設定臨時存取權的數據,這也是下一節的主題。
以上就是PHP安全-重播攻擊的內容,更多相關內容請關注PHP中文網(www.php.cn)!