我正在構建一個基本的應用程序,用戶可以在其中創建一個帳戶。用戶可以保持用戶名簡單,如alex
。可以有多個用戶,用戶名爲alex
。對於他們每個人,我將生成一個唯一的密鑰用作密碼。關鍵可以是a3exyG
,alevuQ
或類似的東西。該密鑰將與用戶名一起郵寄給用戶。後來這些可以用於登錄。我的問題是這是否構成任何安全問題。我的意思是,如果其他人已經可以訪問用戶的電子郵件ID,他/她仍然可以重置密碼。將用戶名和密碼直接發送給用戶的問題?
回答
您不應以純文本格式發送/存儲敏感數據。通常所做的是向用戶發送一個鏈接到用戶可以設置密碼的網頁。
我會做什麼:
- 讓用戶選擇它自己的密碼時,簽約
- 存儲密碼散列
- 如果您使用的是ID,而不是電子郵件的做招牌你應該讓它們變得獨一無二,因爲某人與我的身份相同並且不太安全,並且我輸入了密碼並意外登錄到其他用戶帳戶。
另一種方法是強制用戶在使用通過電子郵件收到的密碼登錄後更改其在網站上的密碼。
的更多信息:
用戶可以更改自己的密碼?如果他們可以,你會有一個問題,如果有兩個條目匹配相同的用戶和密碼...
不,如果他們要求重置密碼,我會向他們發送一個類似的隨機生成的密鑰,而不會與其他人發生衝突。 –
@SujataHulsurkar你可以發送他們到他們的電子郵件鏈接到你的網頁,他們可以把他們的帳戶的新密碼。 – Gori
個人我不會那樣做。用戶名應該是唯一的(以避免任何問題),並且密碼應該總是在數據庫中散列並由用戶選擇。
當您驗證輸入的密碼應該被散列並與數據庫中的值進行比較......單向街道。
密碼永遠不會郵寄給用戶。
如果您需要重置忘記的密碼,我會創建一個過期的令牌,並通過電子郵件發送帶有該令牌的鏈接給用戶,並將他們帶到頁面以輸入新密碼。
編輯: 我想說某人能夠訪問某人的電子郵件的風險遠遠小於使用純文本存儲的密碼,密碼被周圍郵寄和重複系統上的用戶名。
再加上@Gori說的話,我認爲這是開發者責任的問題。
通過電子郵件發送任何類型的敏感數據(如密碼)或以純文本形式存儲它們是不安全的(因此不負責任)。
如果兩個用戶具有相同的名稱和密碼會怎麼樣?您必須提供更多信息來區分用戶,保護帳戶和確定合適的用戶就越容易。
作爲開發人員您的責任不在於確保用戶的電子郵件安全。這是電子郵件提供商的責任。只要確定你在寫什麼就可以了。
this Stackexchnage question的接受答案解決了這個問題。你可能會看看。
- 1. 使用用戶名和密碼將C#發送給Cassandra服務
- 2. 用cURL發送用戶名和密碼
- 3. Python Slack API直接由slackbot發送給用戶問題
- 4. 使用用戶名和密碼時的Rabbitmq連接問題
- 5. 直接將用戶名和密碼傳遞給iframe中的外部網站
- 6. 535-5.7.8發送郵件時不接受用戶名和密碼
- 7. 問題克隆與用戶名/密碼
- 8. 使用javamail發送沒有用戶名和密碼的郵件
- 9. 的用戶名和密碼
- 10. 將重置的密碼郵件發送給用戶
- 11. 用Spring用戶輸入的用戶名和密碼發送郵件
- 12. 使用ajax發送用戶名和密碼是否安全?
- 13. 在web服務調用中發送用戶名和密碼
- 14. 使用json發送用戶名和密碼到web服務
- 15. 使用Webservice從PHP發送用戶名和密碼到JAVA Api
- 16. 我如何發送用戶名和密碼彈出使用硒
- 17. 如何在Ajax調用中發送用戶名和密碼?
- 18. 如何使用RestClient發送用戶名和密碼
- 19. MySQL用戶密碼問題
- 20. 用戶名和密碼不被接受
- 21. Crystal report詢問用戶名和密碼
- 22. googleads.g.doubleclick.net詢問用戶名和密碼
- 23. 如何在grails中將密碼發送給用戶郵件?
- 24. 發送HTTP身份驗證的用戶名和密碼
- 25. 宏直接在網站上輸入用戶名和密碼
- 26. 用戶名和密碼
- 27. Multyvac用戶名和密碼
- 28. phpmyadmin用戶名和密碼
- 29. Crystal Report一直在詢問用戶名和密碼
- 30. 發送密碼鏈接到時用戶忘記密碼
如果有人已經有權訪問電子郵件ID,他們可以以任何方式設置或重置密碼。那麼,什麼是額外的複雜性。 –
@SujataHulsurkar這不是額外的複雜性,它只是簡單的安全性。我可以選擇一個像alex這樣的常用用戶名,並開始嘗試常用密碼,也許其中一個alex用戶擁有字典密碼,並且可以輕鬆登錄到人的帳戶 – Gori
我根據用戶名決定隨機字符串的密碼。對不起,如果我聽起來啞巴。我只是想了解這種方法的主要問題。 –