2015-08-21 43 views
-4

我正在構建一個基本的應用程序,用戶可以在其中創建一個帳戶。用戶可以保持用戶名簡單,如alex。可以有多個用戶,用戶名爲alex。對於他們每個人,我將生成一個唯一的密鑰用作密碼。關鍵可以是a3exyG,alevuQ或類似的東西。該密鑰將與用戶名一起郵寄給用戶。後來這些可以用於登錄。我的問題是這是否構成任何安全問題。我的意思是,如果其他人已經可以訪問用戶的電子郵件ID,他/她仍然可以重置密碼。將用戶名和密碼直接發送給用戶的問題?

回答

1

您不應以純文本格式發送/存儲敏感數據。通常所做的是向用戶發送一個鏈接到用戶可以設置密碼的網頁。

我會做什麼:

  • 讓用戶選擇它自己的密碼時,簽約
  • 存儲密碼散列
  • 如果您使用的是ID,而不是電子郵件的做招牌你應該讓它們變得獨一無二,因爲某人與我的身份相同並且不太安全,並且我輸入了密碼並意外登錄到其他用戶帳戶。

另一種方法是強制用戶在使用通過電子郵件收到的密碼登錄後更改其在網站上的密碼。

的更多信息:

+0

如果有人已經有權訪問電子郵件ID,他們可以以任何方式設置或重置密碼。那麼,什麼是額外的複雜性。 –

+0

@SujataHulsurkar這不是額外的複雜性,它只是簡單的安全性。我可以選擇一個像alex這樣的常用用戶名,並開始嘗試常用密碼,也許其中一個alex用戶擁有字典密碼,並且可以輕鬆登錄到人的帳戶 – Gori

+0

我根據用戶名決定隨機字符串的密碼。對不起,如果我聽起來啞巴。我只是想了解這種方法的主要問題。 –

0

用戶可以更改自己的密碼?如果他們可以,你會有一個問題,如果有兩個條目匹配相同的用戶和密碼...

+0

不,如果他們要求重置密碼,我會向他們發送一個類似的隨機生成的密鑰,而不會與其他人發生衝突。 –

+0

@SujataHulsurkar你可以發送他們到他們的電子郵件鏈接到你的網頁,他們可以把他們的帳戶的新密碼。 – Gori

2

個人我不會那樣做。用戶名應該是唯一的(以避免任何問題),並且密碼應該總是在數據庫中散列並由用戶選擇。

當您驗證輸入的密碼應該被散列並與數據庫中的值進行比較......單向街道。

密碼永遠不會郵寄給用戶。

如果您需要重置忘記的密碼,我會創建一個過期的令牌,並通過電子郵件發送帶有該令牌的鏈接給用戶,並將他們帶到頁面以輸入新密碼。

編輯: 我想說某人能夠訪問某人的電子郵件的風險遠遠小於使用純文本存儲的密碼,密碼被周圍郵寄和重複系統上的用戶名。

0

再加上@Gori說的話,我認爲這是開發者責任的問題。

通過電子郵件發送任何類型的敏感數據(如密碼)或以純文本形式存儲它們是不安全的(因此不負責任)。

如果兩個用戶具有相同的名稱和密碼會怎麼樣?您必須提供更多信息來區分用戶,保護帳戶和確定合適的用戶就越容易。

作爲開發人員您的責任不在於確保用戶的電子郵件安全。這是電子郵件提供商的責任。只要確定你在寫什麼就可以了。

this Stackexchnage question的接受答案解決了這個問題。你可能會看看。