如何实现密码重置功能而不会受到跨域引用者泄漏的影响?

信息安全 Web应用程序 http 数据泄露 推荐人
2021-08-21 18:38:51

我通常通过发送包含以下内容的链接来实现密码重置功能:

http://example.com/pwreset?id=userId&resetToken=superSecretResetToken

在我的pwreset页面上,我通常会向第三方请求一些资源。referer据我了解,由于此时我的 URL 中有敏感信息,因此可能会在发出请求时在标头中向这些第三方透露。

虽然我信任这些方,但我希望他们看不到 URL,这些 URL 将使他们能够重置密码或将这些信息记录在他们的终端上,并且在他们的系统受到损害时可用。

几个问题:

  • 是否可以实现包含第三方资源的密码重置页面而不披露referer
  • 除了第三方,这些信息还能在哪里看到(如果有的话)?
3个回答

是的。这可以解决您的问题:

  1. mysyte.com/?token=xxx 设置 cookie 并重定向到 mysite.com/changepwd 而不返回任何标记
  2. mysite.com/changepwd 通过 cookie 识别用户,并且可以安全地请求 3rd 方资源,而不会通过引荐来源标头泄漏令牌。

回答你的第二个问题:如果资源是通过 http 的,那么你和第 3 方之间的任何网络节点都可以看到令牌。如果是 https,那么只有第 3 方会获得令牌。

使令牌一次性使用:在第一次请求页面时将其过期,因此一旦发生泄漏,它对任何人都不再有用。

您还可以通过重定向到您不介意被泄露的中性 URL 来响应初始请求(已设置 cookie/会话以记住身份验证)。然而,这仍然使浏览器历史记录、服务器/代理日志和客户端扩展成为可能的泄漏源。

在 2014 年提出这个问题时,它并不存在(第一个公共工作草案是从 2014 年 8 月 7 日开始,问题是在 2014 年 10 月提出的),但是推荐人政策允许这样做,说明(通过标题)不应为此站点请求发送推荐人,仅提供域等(然后由不同的客户来支持/尊重它)

不过,对于这个用例,Valentina 的回答可以完美运行,无需推荐人策略支持。