-1

这个过程是这样工作的。

  1. 如果登录失败 5 次,他们需要重置密码并被发送到密码重置页面。
  2. 用户输入电子邮件地址
  3. 链接将发送到提供的电子邮件地址。记录令牌、电子邮件和时间。
  4. 回到站点,如果令牌有效,则检查 db 以查找电子邮件地址是否是实际成员。
  5. 如果他们是会员,则密码重置将继续,否则他们将陷入死胡同。

但是在写完这篇文章后,我想知道是否应该在发送电子邮件之前检查电子邮件地址是否与实际的会员帐户相关联。

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

4

2 回答 2

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

不要做假设

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

让用户弄清楚:

用户名或密码不正确。
需要帮忙?
I forgot my username I forgot my password

  • 如果单击上述之一(弹出此:)

你的邮件:_________________ Send me a [password/username] reset link

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

您应该很快会收到一封电子邮件,其中包含指向 的重置链接[theEnteredEmail]
没有收到任何重置电子邮件?Resend

(可选)此时不要锁定帐户。保持可访问性。如果您有一个Active Reset Record,如果用户使用“旧”数据成功访问它的配置文件,您可能希望删除它。用户可能累了或只是有点老了,他可能会记住他的帐户数据 - 并且可能不希望重置任何内容,并且可能希望忽略重置链接电子邮件。

密码尝试失败

仅当您注意到大量连续失败尝试时,宽限期锁定/保护帐户。创建该特定案例的数据库日志。
如果在您的数据库中username 存在,但密码不正确→ 向相应的用户配置文件电子邮件发送离散通知,其中包含您从日志中收集的所有数据

[user][day/time]我们向您的帐户注册[n]失败的登录尝试:
[logFile]
(n 严重性=高)我们保护/锁定了您的帐户。请点击此链接解锁您的个人资料。 [unlockProfileLink]
(n severity=low)为了使您的帐户更安全,请使用强密码(在这里您可以建议一个休息密码链接)


用户真的老了

打开他的电子邮件并点击重置链接

  • 检查推荐重置链接对该帐户是否仍然有效。
  • 有效的?创建临时会话

(您应该能够从与帐户的“已打开”到期重置记录令牌相关联的引用 URL 链接识别用户帐户)

[user]
,您的新 [用户名/密码]:_____________
重复 [用户名/密码]:     _____________ UPDATE [username/password]

  • 在提交时检查临时会话或令牌是否未过期并且两个字段都匹配
  • 如果推荐人匹配与帐户关联的临时重置记录(令牌) - 更改密码/或/用户名

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

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

登录
用户名:_________
密码:  _________ LOGIN

  • 成功?验证登录会话
  • 失败?从上面重复:)
于 2015-11-12T23:25:45.197 回答
0

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

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

  1. 用户输入电子邮件地址
  2. 后端检查该电子邮件地址是否存在(用户在创建帐户期间已告诉您)。如果是,则生成一个令牌并将该令牌与该帐户相关联。如果没有,死路一条。
  3. 将令牌发送到电子邮件地址。用户可以单击它,验证他是该电子邮件地址(以及该帐户)的所有者,并且能够更改他的密码。

如果您充当电子邮件帐户提供商,您可以将令牌发送到用户在注册帐户时告诉您的第二个电子邮件地址。更好的解决方案是通过短信或邮件向他发送令牌。

于 2015-11-12T23:07:28.917 回答