电子邮件密码重置 - 在之前或之后验证成员资

时间:2015-11-12 22:58:21

标签: php email-verification

这个过程就像这样。

  1. 如果登录失败5次,则需要重置密码并发送到密码重置页面。
  2. 用户输入电子邮件地址
  3. 将链接发送到提供的电子邮件地址。记录令牌,电子邮件和时间。
  4. 返回该站点,如果令牌有效,则检查db以查找email addr是否为实际成员。
  5. 如果他们是会员,则密码重置会继续,否则他们就会死路一条。
  6. 但是在写完这篇文章之后,我想知道在发送电子邮件之前是否应该检查电子邮件地址是否与实际的会员帐户相关联。

    所以这是我的问题,我应该在之前和之后进行验证,还是在他们返回网站之后?影响?

2 个答案:

答案 0 :(得分:2)

  • 用户多次提交错误的登录数据 ...

不要做出假设

如果password错误或者实际上是username,您应该做出假设 - 您也不应该通知用户确切的错误(出于安全原因)。别)。

让用户想出来:

  

用户名或密码不正确。
   需要帮助?
  我忘记了用户名 我忘记了密码

  • 如果点击上面的其中一个(弹出这个:)
  

您的电子邮件:_________________ 发送给我[密码/用户名]重置链接

  • 如果提交的电子邮件确实存在,请检入数据库!
    (甚至不要考虑将重置链接发送到您注册表中没有的电子邮件!)
  • 电子邮件存在?在该帐户的数据库中创建重置记录,并将重置链接发送到您用户的电子邮件。
  • 电子邮件不存在?谁在乎!出于安全原因,您应该显示相同的成功消息! (你不希望恶意用户玩猜谜游戏吗?由你决定。)
  

您很快就会收到一封重置指向[theEnteredEmail]的电子邮件   没有收到任何重置电子邮件? 重发

(可选)此时不要锁定帐户。保持可访问性。如果您有活动重置记录,则可能需要在用户使用“旧”数据成功访问其配置文件时将其删除。用户可能会感到疲倦或只是有点衰老,他可能会记住他的帐户数据 - 并且可能不想重置任何内容,并且可能想要忽略重置链接电子邮件。

密码尝试失败

宽限期锁定/保护帐户仅当您发现大量连续失败尝试时才会这样做。创建该特定案例的DB日志 如果您的数据库中username 存在,但密码不正确→向相应的用户个人资料发送离散通知电子邮件包含您的所有数据从日志中收集

  

您好[user],我们注册的[day/time] [n]登录尝试登录失败:    [logFile]
   (严重性=高) 我们保护/锁定了您的帐户。请点击此链接解锁您的个人资料。 [unlockProfileLink]
   (严重程度=低) 要使您的帐户更安全,请使用强密码 (此处您可以建议其他密码链接)

用户非常老态,

打开他的电子邮件,跟随重置链接

  • 检查引用重置链接是否仍对该帐户有效。
  • 有效吗?创建临时会话

(您应该能够识别引荐网址链接中的用户帐户,该链接与该帐户的“已打开”即将过期重置记录令牌相关联)

  

[user]
  您的新[用户名/密码]:_____________
  重复[用户名/密码]:_____________ 更新[用户名/密码]

  • 提交时检查临时会话或令牌是否未过期两个字段匹配
  • 如果引荐来源与帐户关联的临时重置记录(令牌)匹配,则更改密码/或/用户名

  • 成功? 用户仍必须从登录页面正确登录!

  

您的[username/password]现已更新。您很快就会收到一封确认电子邮件。

  

<子> <强> 登录
  用户名:_________
  密码:_________ 登录

  • 成功? 验证登录会话
  • 失败?从上面重复:)

答案 1 :(得分:0)

编辑: 如果您不是电子邮件帐户提供商:

在发送电子邮件之前,您应该确定电子邮件地址是否有效。您发送的令牌也应始终与实际帐户相关联。否则,您可以更改任何帐户的密码。所以我的建议是:

  1. 用户输入电子邮件地址
  2. 后端检查该电子邮件地址是否存在(用户在创建其帐户时告诉您的)。如果是,则生成令牌并将该令牌与该帐户相关联。如果没有,死路一条。
  3. 将令牌发送到电子邮件地址。用户可以点击它,验证他是该电子邮件地址的所有者(也是该帐户的所有者)并且能够更改他的密码。
  4. 如果您充当电子邮件帐户提供商,您可以将令牌发送给用户在注册其帐户时告知您的第二个电子邮件地址。更好的解决方案是通过短信或邮件向他发送令牌。