PHP安全-重播攻擊
重播攻擊,有時稱為演示攻擊,即攻擊者重現(xiàn)以前合法用戶向服務(wù)器所發(fā)送的數(shù)據(jù)以獲取訪問權(quán)或其它分配給該用戶的權(quán)限。
與密碼嗅探一樣,防止重播攻擊也需要你意識到數(shù)據(jù)的暴露。為防止重播攻擊,你需要加大攻擊者獲取任何用于取得受限資源的訪問權(quán)限的數(shù)據(jù)的難度。這主要要求做到避免以下做法:
設(shè)定受保護資源永久訪問權(quán)的數(shù)據(jù)的使用;
設(shè)定受保護資源訪問權(quán)的數(shù)據(jù)的暴露(甚至是只提供臨時訪問權(quán)的數(shù)據(jù));
這樣,你應(yīng)該只使用設(shè)定受保護資源臨時訪問權(quán)的數(shù)據(jù),同時你還要盡力避免該數(shù)據(jù)泄露。這些雖只是一般的指導(dǎo)原則,但它們能為你的運作機制提供指導(dǎo)。
第一個原則據(jù)我所知,違反它的頻率已達到了令人恐怖的程度。很多開發(fā)人員只注意保護敏感數(shù)據(jù)暴露,而忽視了用于設(shè)定受保護資源永久訪問權(quán)的數(shù)據(jù)在使用時引發(fā)的風險。
例如,考慮一下用本地腳本計算驗證表單密碼的hash值的情況。這樣密碼的明文不會暴露,暴露的只是它的hash值。這就保護了用戶的原始密碼。這個流程的主要問題是重播漏洞依然如故——攻擊者可以簡單的重播一次合法的驗證過程即可通過驗證,只要用戶密碼是一致的,驗證過程就會成功。
更安全的運行方案、MD5的JavaScript源文件以及其它算法,請看http://pajhome.org.uk/crypt/md5/。
類似于對第一原則的違反是指定一個cookie以提供對某一資源的永久訪問權(quán)。例如,請考慮下面的通過設(shè)定cookie運行的一個永久訪問機制的嘗試:
CODE:
<?php
$auth = $username . md5($password);
setcookie(’auth’, $cookie);
?>
如果一個未驗證用戶提供了一個驗證cookie,程序會檢查在cookie中的密碼的hash值與存在數(shù)據(jù)庫中的密碼的hash是否匹配。如果匹配,則用戶驗證通過。
本流程中的問題是該驗證cookie的暴露是一個非常大的風險。如果它被捕獲的話,攻擊者就獲得了永久訪問權(quán)。盡管合法用戶的cookie可能會過期,但攻擊者可以每次都提供cookie以供驗證。請看圖7-2中對這種情形的圖示。
一個更好的永久登錄方案是只使用設(shè)定臨時訪問權(quán)的數(shù)據(jù),這也是下一節(jié)的主題。
相關(guān)文章:
