2011-07-27 59 views
8

我忙於爲我的項目登錄系統。檢查用戶是否更改了cookie值,手動

只是爲了一個額外的步驟,以安全..我如何檢查/檢測,如果用戶手動修改cookie的值?

是否有一些簡單的方法來做到這一點?或者我必須設置一個額外的Session變量並與之匹配?據說這是一個普通的ASP.Net會話可以通過瀏覽器追蹤嗎?並可以向用戶查看?

謝謝。

回答

9

你可以添加數字簽名的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

+0

困惑,什麼是'headerencoder'? –

+0

對不起,剪切粘貼代碼:)我會編輯。 –

+0

謝謝比爾,我一定會用這個。 –

2

如果你必須處理這樣的敏感信息,我建議你不要將其存放在用戶的cookie。而是使用sessions來存儲這些值,因爲用戶將無法篡改這些值。

1

爲什麼不加密cookie值。這樣,用戶很難真正改變它。就像之前的回答所提到的,如果它非常敏感,Cookie不是存儲它的地方,但加密可以爲您提供更多的保護。

+0

加密是不夠的 - 你可以改變這些值,它不會被檢測到(雖然解密可能會失敗,當然還有用戶進行盲目的變化) - 你還必須簽署餅乾,比爾Brasky建議。 – blowdart

+0

真的哥哥,我不認爲這個答案值得讚賞。檢查這個答案,這是一個選項。這取決於你的意圖是什麼。可能是加密將爲他的目的工作。 http://stackoverflow.com/questions/523629/tips-on-signed-cookies-instead-of-sessions –

0

第二個變量添加到您的cookie,它是唯一的第一個值。

Page_Load兩個值與數據庫中。

如果它們不匹配的記錄,然後刪除cookie。

相關問題