2010-08-25 36 views
0

我想這個cookie密碼存儲安全系統上輸入,這個cookie系統對於存儲密碼是否安全?

當用戶蜱記得我框,它存儲這些cookie:以純文本
用戶名。

使用服務器存儲在數據庫中的完全隨機密鑰加密的密碼,永遠不會傳遞給客戶端,並且是特定於用戶的密碼,隨每次登錄都會更改。

然後,服務器在需要時使用加密密鑰解碼密碼。

+1

請注意:如果您採用此路線,絕對沒有理由在Cookie中實際存儲加密密碼。只需存儲由服務器生成的足夠長的隨機數。由於它對客戶來說沒有任何意義,只要服務器可以驗證它,存儲的內容並不重要;所以不要打擾使它與密碼相關。 – 2010-08-25 02:57:46

+0

@Mark Peters:您應該將其作爲答案;) – caf 2010-08-25 04:37:41

回答

2

攻擊者可以竊取別人的cookie,然後進行登錄,而無需知道實際的密碼。他們只會發送相同的cookie並進入。能夠嗅探流量並稍後重新發送是一個重播攻擊

最好的防禦是使用SSL所以安全是端對端。如果你正在運行一個嚴肅的商業網站,那麼你應該使用SSL,沒有ifs和or或buts。使用SSL cookie將始終通過網絡進行加密,因此,無論攻擊媒介從數據包嗅探變爲從終端用戶的硬盤驅動器讀取cookie,其內容都無關緊要。

如果您的網站不是那麼嚴肅,然後閱讀。

在我的網站上,我接收用戶的密碼並連接其IP地址和一個祕密令牌,並對所有這些密碼進行散列。該散列存儲在cookie中。然後在服務器上對它們進行身份驗證,我重新計算散列並驗證它們發送的匹配。

這將cookie與特定的IP地址綁定,因此它不能被第三方輕鬆地重用。它還消除了解密cookie和發現密碼的任何危險,因爲散列(SHA256,說)是單向的並且不能顛倒。

此外,我希望你不會在數據庫中存儲原始密碼。您正在存儲密碼哈希,是嗎?並且也是鹽漬他們爲了防止彩虹表攻擊?

+0

不幸的是,使用IP嚴重限制瞭解決方案的實用性,因爲它違背了cookie的目的,即識別客戶端。這對我的智能手機或筆記本電腦來說非常煩人,例如,我使用了許多不同的熱點。 – 2010-08-25 03:05:04

+0

非常好的點數。謝謝。 – 2010-08-25 14:01:05

+0

我很困惑你的兩條建議如何協同工作。 數據庫中沒有明文密碼,這很有意義。除了salt之外,您還要存儲哈希密碼+ salt,所以如果有人隨密碼一起出現,則可以驗證它是否是正確的密碼。 您在我的已登錄cookie中擁有的東西是哈希密碼+ ip +令牌。所以...你怎麼能證實它是正確的?沒有人擁有任何密碼,所以你不能重新計算密碼+ ip +令牌散列。 – 2011-08-10 18:56:38

2

沒有違法意圖,但你爲什麼要重新發明輪子?

許多人已經實現了他們自己的版本,爲什麼不搜索SourceForge?可重複使用的軟件 - 您能否比您找到可接受(並經過測試)的解決方案更快地進行編碼?

使用現成的構建模塊,繁重的工作,並移動到有趣的部分;-)

0

正如Leonix所說,這可能更好留給以前開發它的人,並修復所有的錯誤。特別是因爲它與安全有關。

除此之外,我可以發現的一個明顯缺陷是缺乏身份驗證,或者對'重放'攻擊敏感,有人只是盲目地發送他們可以從他們想要模仿的人複製的cookie數據。

+0

所有的Cookie都有這個問題... – rook 2010-08-25 05:07:08

1

每@caf,加入這個作爲一個答案:

如果你打算走這條路,讓Cookie基本上存儲服務器的祕密,但絕對沒有理由認爲祕密有什麼關係與用戶的密碼。客戶無論如何都無法解釋數據的含義/價值。

  • 到客戶端,它只是隨機的數據,因爲它不知道密鑰
  • 到服務器,這是從是
    1. 獨特的客戶端的所有其他數據沒有什麼不同,和
    2. 祕密給服務器
  • 給攻擊者,這是不多,也不少隨機(或者類似地,硬窮舉)大於等於比特長度的隨機數。

從本質上講,加密數據只是一個認證令牌,它具有特殊的規則來生成令牌。但是將令牌設置爲用戶的加密密碼只會增加更多風險,因爲現在如果攻擊者以某種方式從服務器獲取加密/解密密鑰,則它們將擁有用戶的密碼。由於它具有內在價值,你已經使令牌本身成爲一個有吸引力的目標。

因此,不要將加密密碼存儲在數據庫中的cookie和加密密鑰中,而只需讓服務器生成足夠長的隨機數並將其存儲在數據庫和cookie中。因爲它對客戶端來說沒有任何意義,所以使用令牌並不重要,只要它是隨機的,很難猜測並且服務器可以驗證它。不要打擾使它與密碼相關。