2013-11-25 58 views
2

客戶端首次在服務器上登錄後獲得HMAC加密的祕密 - 但在(java腳本)客戶端上存儲祕密的最佳方式是什麼? cookie,localStorage? thxHMAC/Javascript - 在哪裏存儲祕密?

+0

是不是hmac是通過密鑰哈希計算?它不是一個加密值。但通過密鑰散列數據...(一個p.s - 我會去cookie)。 localStorage不適合那樣的事情。 –

+0

這是公鑰和私鑰的組合。用於識別用戶和私鑰的公鑰,用於生成傳輸數據的散列。 –

+0

您不應該通過寫入將私鑰從服務器傳遞到客戶端,這使得它非常不安全。 –

回答

0

那麼答案是,這取決於。 localStorage和cookie不等效。儘管它們都可以用於在客戶端存儲信息,但它們都服務於特定的目標。 localStorage是爲了在本地存儲應用程序的數據。它不能直接從服務器設置,也不能通過HTTP頭髮送到服務器。

你也可以看看sessionStorage

但是,Cookie通常是通過HTTP標頭從服務器(即使存在JS API)創建的,並且它們包含到期信息。一旦設置,它們將成爲每個客戶端請求的HTTP頭部分的一部分,從而允許服務器訪問信息。

兩種方式都可能同樣安全,因爲它們都不能從另一個域訪問。但是,如果您正在傳輸安全信息,則應該通過HTTPS來完成。

0

best方式很主觀。

如果您必須將其存儲在客戶端(您必須,我假設),那麼它不能安全,它不能。
把它放在一邊,best的方式取決於你的情況。

您是否試圖以舊版瀏覽器爲目標?那麼你不能使用本地存儲。

由於我們已經從等式中移除了安全性,因此您最深入的,跨瀏覽器兼容的解決方案是將其存儲在cookie中。
這也可能是最簡單的解決方案之一,儘管肯定是最不安全的(因爲在這裏你唯一的安全形式是默默無聞的,而cookie是......不是晦澀難懂的)。

+0

您的第二個問題首先 - 不,舊版瀏覽器不受支持。 對於JS應用程序(帶有REST後端),如果我是對的,我必須將其存儲在客戶端上。祕密應該只在第一次登錄後才傳輸一次。 (或者,如果密鑰無效) –

+0

如果您不想試圖從當前客戶端明確隱藏此信息,而僅僅是從其他客戶端,我們可以說它是安全的。您不能從其他域訪問cookies/localStorage。 – plalx