我有一个新网站。以下是我的场景:

我将向 5 个人发送一封电子邮件(数字不重要),在电子邮件内,我将包含一个链接供他们点击:

www.domain.com/email=abc@xyz.com&key=abc...xyz

它们的密钥是在 php 中使用 salt 和 sha1 随机生成的。单击他们电子邮件中的链接后,我可以直接让他们访问更新个人资料页面吗?或者我需要要求他们再次登录吗?

如果我直接让他们访问更新个人资料页面,我需要注意哪些安全事项?我知道登录的用途,可以存储会话,但是,问题是,他们点击电子邮件中的链接,我认为它非常私密和安全。

我能想到的唯一安全缺陷是:黑客可以神奇地记住“密钥”(大约 60++ 个字符),然后在浏览器中输入 URL:www.domain.com/email=abc@xyz.com&key=abc...xyz。

如果黑客能做到这一点,那我就完了。我的用户帐户将被黑客入侵。

黑客还有什么可以破解的吗?只需更新个人资料页面即可。

顺便说一句,如果他们已经更新了他们的个人资料,我应该删除数据库中的“密钥”吗?

我正在使用 php 和 mysql

有帮助吗?

解决方案

密码重置电子邮件应该有一个一次性使用 - 存储一个不透明的令牌数据库,在电子邮件中发送,并且只允许它使用一次

其他提示

我同意保罗,但轮廓更新,我建议在登录后做。 您也可以显示,当他重置其密码记住客户端的IP地址。

典型的做法是要求用户在收到“忘记密码”电子邮件时更改密码,然后让他们登录才能更改任何内容。

我最近创建的密码电子邮件的实现如下:

  • 创建一个包含用户 ID 和当前时间戳的数组。
  • 序列化然后加密结果字符串(使用存储在服务器上的对称密钥)。
  • 将加密的字符串放入 url 参数中(我的建议是对数据进行 base64 编码) 两次 以确保您不会在网址中收到不良字符),然后通过电子邮件将其发送给他们。
  • 当有人单击电子邮件中的链接时,首先检查参数是否正确解密(意味着它有效),然后反序列化数据结构。您现在检查原始时间戳。如果从那时起已经过去了太多时间,则拒绝忘记的密码 url,因为它太旧了。
  • 如果 URL 有效且足够新,请将其带到“重置密码”页面。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top