您会建议在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