1

我对我的程序员关于密码重置功能的推理有了一点了解。有人可以告诉我以下哪个更安全,或者它们是否相等?

选项 1:向用户发送一封包含以下内容的电子邮件:

Url: http://mysite/reset/user%mail.com

CODE: 57583

然后用户被带到一个页面,他们必须手动输入代码,但电子邮件已经填充在 Web 表单上。

选项 2:向用户发送以下电子邮件:

URL: http://mysite/reset/user%mail.com&code=57583

我不是程序员,很抱歉,如果这是一个简单的问题,或者我的第二个 url 格式不正确,我的意思是,在示例 1 中,用户必须手动输入代码,而在第二个示例中,表单是 pre - 填充代码。

那么这些是否会与另一个有效地一样安全,或者一个是否具有显着的安全优势?

4

6 回答 6

0

就个人而言,我认为这两种方法同样安全(方法 2 对用户更友好)。

但是,您应该使用更长的代码。否则,它们将很容易被猜到,攻击者可以通过猜测重置令牌来随意重置密码。

于 2013-01-23T18:13:02.587 回答
0

两者同样安全 - 如果电子邮件到达用户的收件箱,并且该电子邮件映射到您网站上的该用户帐户,您可以放心地假设它是您想要的用户。您可以通过允许用户添加备用电子邮件来增加安全性,当他们将密码重置代码发送到电子邮件 A 时,您会向所有其他电子邮件地址发送通知,说“嘿,您或某人向电子邮件 A 发送了密码重置电子邮件. 如果这不酷,请单击此处"

于 2013-01-23T18:11:46.973 回答
0

它们是平等的,因为电子邮件在两种情况下都包含相同的信息。

第二个选项对我来说似乎更加用户友好。但是你可以很容易地提供两者(因为有人有一个邮件客户端,它不允许打开 URL ......)

于 2013-01-23T18:11:53.260 回答
0

由于您已经通过 URL 公开了用户的电子邮件,因此添加密钥并不会降低其安全性。

您可以通过根本不暴露用户的电子邮件来提高安全性 - 用令牌隐藏电子邮件: mysite.com/reset/some-token?key=[key]

并且在页面中不显示电子邮件:email @d****. com

这样人们就不能使用暴力方法来查看人们是否是您系统中的注册人。对于大多数网站来说,这可能不是问题,但我可以看到一些不公开电子邮件和/或注册人列表很重要的用例。

于 2013-01-23T18:16:18.213 回答
0

我会选择第二个选项。与第一个相比,它不会造成任何伤害,它将改善用户体验/可用性。

于 2013-01-23T18:20:05.523 回答
0

正如其他人所提到的,两者都同样安全,第二个选项对用户更友好。然而,攻击者不能轻易猜到“代码”,这一点至关重要。这意味着您应该避免按顺序生成代码或使用一些容易猜测的算法。最后,作为对任何猜测攻击的预防措施,如果您认为某个 IP 地址正试图错误地猜测代码,您可能希望实施基于 IP 的阻止。如果密码被猜错 10 次(例如),另一种选择可能是锁定用户帐户以防止密码被重置。

于 2013-01-23T18:35:19.863 回答