2013-09-27 34 views
0

除了不應將重要信息存儲在cookie中,您建議使用什麼encyrption方法來加密cookie的內容?我應該使用什麼加密來加密cookie內容?

一個關鍵的問題是cookie只能保存這麼多的數據(我認爲它是4k?),所以加密算法不應該將內容的大小增加到一個成爲問題的程度。

目前的餅乾店:

WebsiteId (integer value 
Name  varchar(50) 
Country varchar(50) 
+4

爲什麼要加密呢?它是祕密嗎? –

+4

如果數據太重要,請不要將其保存在cookie中,將其保存在會話中並將會話ID保存到cookie中。 – Prix

+0

@DavidSchwartz安全通過默默無聞。 – loyalflow

回答

5

這聽起來像你真的想防止被篡改的數據,而不是對其進行加密。一個簡單的方法是使用HMAC。基本上,你有一個服務器祕密,你用服務器祕密散列數據,並把散列輸出放在cookie中。爲了驗證它,你從cookie中移除哈希,使用服務器祕密計算其餘數據的哈希,然後根據cookie中的哈希檢查它。數據不能被篡改,因爲攻擊者無法計算正確的哈希,因爲他們不知道服務器的祕密。

因此,例如,如果數據是「富=酒吧&巴茲= qux」,你將計算的安全散列「富=酒吧&巴茲= qux」,說這是「EN0RmBxNGyo」,並設置cookie來「foo = bar & baz = qux & hash = EN0RmBxNGyo」。然後,當您獲取cookie時,您將刪除哈希以獲得「foo = bar & baz = qux」並計算其哈希值。你再次得到「EN0RmBxNGyo」,它與cookie中的散列相匹配,所以你接受cookie。

如果攻擊者改變「foo = bar & baz = qux」,哈希將不匹配,並且cookie將被拒絕。他們無法計算與更改後的數據相對應的哈希,因爲他們不知道用於計算哈希的服務器祕密。

請注意,您應該有一個合格的密碼專家審查您的實施。實施不良的HMAC很容易受到length-extension attacks的影響,事實上Flickr發現the hard way