1

我在尋找想法來驗證用戶身份,而無需通常的服務器訪問。 在客戶端驗證用戶的任何半安全方式都是可以接受的。不使用服務器進行身份驗證

我想在js文件中存儲一些加密的祕密,然後只有具有正確代碼的用戶才能夠解密它,並且正確的代碼可以輸入或存儲在cookie中或其他東西。 聽起來不錯,還是其他想法?

+9

這樣做的問題是用戶可以操縱任何東西和客戶端的一切。執行客戶端身份驗證永遠不會安全。如果這些cookies被偷走並放在另一臺機器上會發生什麼? – crush

+1

沒有服務器的身份驗證很容易。問題是「你將如何處理這種認證」。如果您要在用戶端驗證它們之後讓用戶訪問服務器端資源,那麼您的時間將會很糟糕。 –

+0

如果您授予用戶僅在客戶端進行身份驗證的能力,任何半勝任的編碼人員都將能夠繞過任何所謂的「安全」。如果這不是真的安全性足夠滿足您的應用程序,那麼它如何執行並不重要。最佳做法是「不要這樣做。「如果你決心向前走,那麼選擇一種能讓你感覺良好的感覺,就是你認爲合適的感覺。 –

回答

0

也許你可以存儲一個密碼的散列並加密敏感的應用程序JS源代碼,以便在用戶使用正確的密鑰「驗證」時評估它?

請參閱this有關Google的JavaScript處理方法的文章。使用加密的JavaScript字符串源代碼,並且您是客戶端安全的?

+0

這在任何方式,形狀或表單上都不安全,客戶端可以讀取和執行所有Javascript,_by definition_。如果你加密Javascript,使得客戶端實際上無法讀取它,這將變得不可能執行,因此無法使用。 – SLaks

+0

我從來沒有說過javascript會保持加密,只是只有一個正確的用戶密鑰才能解密它(參見技術在我提到的文章中) – cubitouch

+0

您不妨使用訪問控制,而不是將其提供給其他用戶。 – SLaks

0

我存儲一些加密了的祕密在一個js文件,那麼只有擁有正確的代碼將能夠解密的用戶認爲,和正確的代碼被輸入或存儲在cookie中或其他東西。

你要求的絕對是可能的,但我不確定它實際上對你有用。

您需要使用密鑰導出功能,如PBDFK2(「基於密碼的密鑰導出功能2」)。用戶輸入密碼,然後KDF將密碼轉換爲密鑰。然後,使用密鑰來操作像AES這樣的強對稱密碼(並確保使用像CBC這樣的安全操作模式)。這種方法相當安全,但仍然容易受到關鍵記錄器(操作系統級和瀏覽器級)和內存狀態檢查的影響。

這裏重要的一點是,用戶必須輸入密碼,以便加密的祕密在第一位。您無法向用戶發送密碼,然後要求輸入密碼。用戶可以使用密碼來加密消息,然後讓系統稍後使用相同的密碼以供將來訪問。

或者,您可以自己選擇密碼,生成密鑰和加密數據,然後將所選密碼(以及加密數據)發送給用戶以安全記憶或存儲。

實際上,CryptoJS是支持AES和PBKDF2的JavaScript實現。

相關問題