您會建議在MVC
和C#
之間創建安全密碼重置鏈接的方式?我的意思是,我將創建一個隨機令牌,對不對?如何在發送給用戶之前對其進行編碼?是MD5夠好嗎?你知道任何其他安全的方式嗎?如何創建密碼重置鏈接?
回答
我不認爲你需要一個加密的字符串用於此目的。我認爲創建一個字符串Guid就足夠了。
string thatString=Guid.NewGuid("n").ToString();
將它保存在您的數據庫表中針對該特定用戶帳戶。爲具有此字符串的用戶創建一個鏈接並將其發送給他們。當他們點擊它時,它會將它們帶到一個操作方法中,並且它們會得到與我們存儲的此臨時字符串相關聯的相應用戶記錄,並顯示用於更新密碼的表單。
如果你有疑問Guid是否是唯一的,結賬this。
使用System.Security.Cryptography.RandomNumberGenerator
這是一個密碼安全的RNG。只需將其包含在電子郵件中,並將其存儲在數據庫中供稍後檢索。我沒有看到它在哈希中的重點。
它記錄在這裏:http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator.aspx
using System.Security.Cryptography;
using(RandomNumberGenerator rng = new RandomNumberGenerator()) {
Byte[] bytes = new Byte[8];
rng.GetBytes(bytes);
String sendThisInEmailAndStoreInDB = Convert.ToBase64String(bytes);
}
比使用隨機數更好的是鹽,然後哈希值。這是從安全大師的一個片段:
@using System.Security.Cryptography;
static byte[] GenerateSaltedHash(byte[] plainText, byte[] salt)
{
HashAlgorithm algorithm = new SHA256Managed();
byte[] plainTextWithSaltBytes =
new byte[plainText.Length + salt.Length];
for (int i = 0; i < plainText.Length; i++)
{
plainTextWithSaltBytes[i] = plainText[i];
}
for (int i = 0; i < salt.Length; i++)
{
plainTextWithSaltBytes[plainText.Length + i] = salt[i];
}
return algorithm.ComputeHash(plainTextWithSaltBytes);
}
你可以看到更多的關於他的答案在這裏:https://stackoverflow.com/a/2138588/1026459
基本上只是創建一個密碼。在這裏使用salt並散列它,然後在用戶返回時進行比較。鏈接的答案還包含比較方法和更深入的salt/hashing解釋。
其實,我不會做任何這些。
我面臨同樣的問題,我決定發送重置令牌並執行此操作,我使用了JWT令牌。
在該令牌上(已加密),您可以設置過期時間。只需創建一個包含Customers電子郵件地址的重置令牌作爲聲明,然後設置到期日期,將其存儲在數據庫中(以其加密形式)並對其進行編碼並將其作爲URL參數放置在鏈接上。
然後,當您收到請求時,您可以驗證令牌是否有效。然後,您可以解壓縮它,查看電子郵件地址,然後繼續將其引導至您的安全密碼重置區域以查找其帳戶。 (您可以包含其他聲明,如用戶名等)。
要獲得implemnetation您可以鍵入Install-Package JWT
您將如何調試此令牌?可以提取這種令牌中的所有信息:電子郵件,有效日期...... –
- 1. php重置密碼鏈接
- 2. 創建密碼重置鏈接,在PHP中過期24小時
- 3. 這是創建鏈接重置密碼的最佳做法?
- 4. 更改「密碼重置」url鏈接
- 5. 密碼重置鏈接有效日期
- 6. Symfony FOSUserBundle鏈接重置密碼
- 7. Laravel:發送密碼重置鏈接
- 8. 設計重置密碼鏈接
- 9. Rails devise_token_auth gem,我該如何設置密碼重置鏈接?
- 10. 創建重置Azure AD密碼功能
- 11. 構建激活/密碼重置鏈接的最佳方法
- 12. 如何更改Laravel5.3中的密碼重置鏈接?
- 13. 如何發送汽車密碼重置鏈接產生在Magento
- 14. 如何添加忘記/重置密碼鏈接在#Firebase
- 15. 在yii如何發送密碼重置鏈接
- 16. 如何使用我的IP爲重置密碼鏈接
- 17. Access 2010如何在創建鏈接表時保存密碼
- 18. dnn如何通過創建爲用戶重置密碼
- 19. 如何使用devise手動創建重置密碼令牌
- 20. 如何重置Joomla密碼?
- 21. 如何重置密碼Django?
- 22. 如何重置SA密碼?
- 23. 如何重置密碼
- 24. 如何創建密碼?
- 25. 更改密碼重置在Laravel重定向鏈接5
- 26. 如何創建一個鏈接,讓用戶在設計時簽入時重置他們的密碼?
- 27. 如何創建雙鏈接?
- 28. 如何創建鏈接
- 29. 如何創建RSS鏈接?
- 30. 如何在mailto鏈接中編碼空白鏈接以創建超鏈接
大多數加密庫有生成加密隨機數的工具JWT。你不需要散列,編碼或加密任何東西。你只需要一個隨機數,而不是Random類可以提供的隨機數。 – Servy