我忙於爲我的項目登錄系統。檢查用戶是否更改了cookie值,手動
只是爲了一個額外的步驟,以安全..我如何檢查/檢測,如果用戶手動修改cookie的值?
是否有一些簡單的方法來做到這一點?或者我必須設置一個額外的Session變量並與之匹配?據說這是一個普通的ASP.Net會話可以通過瀏覽器追蹤嗎?並可以向用戶查看?
謝謝。
我忙於爲我的項目登錄系統。檢查用戶是否更改了cookie值,手動
只是爲了一個額外的步驟,以安全..我如何檢查/檢測,如果用戶手動修改cookie的值?
是否有一些簡單的方法來做到這一點?或者我必須設置一個額外的Session變量並與之匹配?據說這是一個普通的ASP.Net會話可以通過瀏覽器追蹤嗎?並可以向用戶查看?
謝謝。
你可以添加數字簽名的cookie值,並檢查簽名,當你讀回。這樣,如果cookie值被篡改,它將非常明顯。
private string sign(string hashStr, byte[] secret)
{
// Compute the signature hash
HMACSHA1 mac = new HMACSHA1(secret);
byte[] hashBytes = Encoding.UTF8.GetBytes(hashStr);
mac.TransformFinalBlock(hashBytes, 0, hashBytes.Length);
byte[] hashData = mac.Hash;
// Encode the hash in Base64.
string hashOut = Convert.ToBase64String(hashData);
return hashOut;
}
編輯:固定編碼所以它明確地UTF-8。
像往常一樣,你也應該確保調用此之前,一些鹽添加到您的字符串,請參閱:Secure hash and salt for PHP passwords
如果你必須處理這樣的敏感信息,我建議你不要將其存放在用戶的cookie。而是使用sessions
來存儲這些值,因爲用戶將無法篡改這些值。
爲什麼不加密cookie值。這樣,用戶很難真正改變它。就像之前的回答所提到的,如果它非常敏感,Cookie不是存儲它的地方,但加密可以爲您提供更多的保護。
加密是不夠的 - 你可以改變這些值,它不會被檢測到(雖然解密可能會失敗,當然還有用戶進行盲目的變化) - 你還必須簽署餅乾,比爾Brasky建議。 – blowdart
真的哥哥,我不認爲這個答案值得讚賞。檢查這個答案,這是一個選項。這取決於你的意圖是什麼。可能是加密將爲他的目的工作。 http://stackoverflow.com/questions/523629/tips-on-signed-cookies-instead-of-sessions –
第二個變量添加到您的cookie,它是唯一的第一個值。
在Page_Load
兩個值與數據庫中。
如果它們不匹配的記錄,然後刪除cookie。
困惑,什麼是'headerencoder'? –
對不起,剪切粘貼代碼:)我會編輯。 –
謝謝比爾,我一定會用這個。 –