首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忘记用于PHP的密码MySQL标记

问忘记用于PHP的密码MySQL标记
EN

Stack Overflow用户
提问于 2012-07-31 15:53:42
回答 1查看 4.1K关注 0票数 0

我是PHP新手,到目前为止,我创建了一个登录、注册和一个忘记的密码,目前用户是从MySQL表中发送密码的。我现在已经使用sha1加密了密码。我目前正在编写代码,因此:

当用户单击“忘记密码”链接时,他们输入用户名和电子邮件地址(验证)。

目前,我发现很难然后发送给他们在发送的电子邮件中的网址链接,以引导他们到一个页面重置。

任何帮助都将不胜感激(代码片段、教程、方法链接等)。

标签

EN

回答 1

Stack Overflow用户

发布于 2012-07-31 16:01:32

  1. 您甚至不应该存储用户密码的散列(未加盐):您应该首先生成一个随机字符串( " salt "),将其与他们的密码连接起来,散列结果(使用SHA1或您喜欢的任何算法),并将哈希和salt存储在数据库中。如果攻击者能够访问数据库中的散列,这将击败预先计算的字典(“彩虹表”)攻击。
  2. 这样做之后,您也不应该在数据库中存储密码重置的临时令牌:如果攻击者能够访问您的用户表,他们只需要完成您的“我忘记了我的密码”表单并从数据库中读取令牌,就可以在没有看到生成的电子邮件的情况下重置该用户的密码。因此,令牌被称为“密码等效”,应该以与密码本身完全相同的方式进行保护:盐渍和散列。
  3. 存储了重置令牌的咸散列之后,您现在可以在URL的查询字符串(例如http://www.example.com/resetpassword.php?user=235747&token=347659864124567532256 )中向您的用户发送一个带有用户ID和重置令牌的链接。
  4. 在遵循该链接之后,所提供的用户和令牌将以$_GET['user']和$_GET['token']的身份提供给您的PHP;然后您可以从数据库中检索salt,与所提供的令牌连接,计算预期的哈希,并与数据库记录中的salt进行比较。如果它们匹配,您有信心用户收到了您发送的电子邮件,然后您可以提示他们输入他们想要的新密码。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11744141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档