我们目前有一个我认为是处理密码重置的非常标准的方案。我们的重置链接是一次性链接:它们在被访问后立即失效,即使用户实际上并没有重置他们的密码。
但是,我们的客户主要是 (99%) 具有积极垃圾邮件过滤功能的企业。特别是,我们的一些最大客户(学区)安装了垃圾邮件过滤器来执行链接扫描。作为算法的一部分,他们访问电子邮件中的 [最多 N] 个链接。当用户请求重置密码时,垃圾邮件过滤器的访问会在用户看到链接之前“过期”。
有没有同样安全的一次性链接的替代品?还是足够安全以属于可接受的实践范围?
我们还需要考虑可用性。我们的客户通常与您所能获得的一样非技术。因此,理想情况下,密码重置过程对用户来说不会变得 [多] 复杂。
到目前为止,这是我们的想法:
- 将重置令牌存储在会话中。当原始浏览器会话打开和/或密码实际上尚未重置时,该链接将保持活动状态。对于使用两种不同设备进行电子邮件和浏览(例如,手机上的电子邮件 + 笔记本电脑进行浏览)的用户来说,这可能会使过程复杂化。
- N 分钟后使链接失效。我想我已经看到了。但是,我不知道什么时间限制是可用和安全之间可接受的平衡。
- 仅在提交表单后使链接失效。一些用户可能会访问该链接,将其放入浏览器历史记录中,但从不提交表单。这是可接受的风险水平吗?