大型网站(例如 Google、Twitter、GitHub 等)如何在不影响安全性的情况下拥有几乎无限的会话长度?

信息安全 饼干 会话管理
2021-08-27 18:19:59

我目前正在为 Web 应用程序实现登录会话系统。我已经阅读了很多推荐非常低的会话和空闲超时的文章。例如OWASP说:

空闲超时值和绝对超时值都高度依赖于 Web 应用程序及其数据的重要性。高价值应用程序的常见空闲超时范围为 2-5 分钟,低风险应用程序的空闲超时范围为 15-30 分钟。绝对超时取决于用户通常使用应用程序的时间。如果应用程序旨在供办公室工作人员使用一整天,则适当的绝对超时范围可以在 4 到 8 小时之间。

“如果会话 ID 被盗,它过期的越快越好”,这具有直观的意义。但是,在使用 Google、Twitter 或 GitHub 等网站时,我看不到这些短会话超时。在那里,我几乎不必再次重新登录:会话无限期地保持活动状态。

他们如何在不影响安全性的情况下实现如此长的会话时间?我已经研究过了,我发现了一些潜在的原因,但没有一个能真正说服我:

我看过类似这样的文章,他们认为大玩家可以这样做,因为它们具有额外的安全功能,例如远程注销、关键操作的重新身份验证提示、登录历史记录和登录通知。这很好,但我真的不明白这将如何允许超长的会话持续时间。大多数普通用户可能从不使用远程注销、登录历史记录或登录通知。并且重新验证提示仅针对“更改密码”和“删除存储库”之类的内容出现,但还有很多事情是您真的不希望攻击者能够做的,并且这些提示不受这些提示的保护。所以这不可能是全部原因!

大型网站还具有额外的保护,例如将会话 ID 绑定到浏览器指纹和 IP 范围。这就是他们的长期会话安全的原因吗?

或者互联网上随处可见的关于超短会话的建议是否已经过时?假设您遵循最佳实践(真正的随机会话 ID,>=128 位熵,Secure; HttpOnly; SameSite=Lax),被盗的会话 ID 实际上仍然是值得考虑的风险吗?如果攻击者可以从您的本地浏览器中提取 cookie 值,那么您肯定会遇到比受损会话更大的问题。

或者最后,大玩家是否只是将用户体验置于安全之上?

1个回答

我认为大型网站的主要内容是它们具有比会话长度更多的安全功能。谷歌在cloud.google上给出了一些话(在第 10 点)。对我来说,关键点是:

谷歌付出了很多努力来确保用户是他们所说的人,并将根据某些事件或行为进行仔细检查。

他们在这里没有详细介绍(我认为他们在其他地方也没有),这是某种“默默无闻的安全”,因为您不知道他们如何检查您的行为以确定您是谁。但是他们(和其他人)有很多关于你的数据,所以他们可以非常精确地做出决定。一件非常基本的事情当然是,如果你从另一个 ip 地址使用相同的会话,它很可能会被窃取。在上面的链接中,还有一些来自 google 的用户身份验证最佳实践,让您可以了解 Google 的全部内容以及他们对不害怕用户非常感兴趣(经常输入他们的密码)。