我正在处理的遗留应用程序让用户填写大量问题,并在问卷的最后一批保存答案。这个过程很漫长,典型的用户可能会在某个时刻超时。
团队提出了无休止的会议以绕过这个问题的想法。经过一些谷歌搜索,我发现了很多文章解释如何增加超时;但是我没有遇到暴露这种做法风险的文章。乍一看,我觉得设置超时是合理的。
我的问题是:
答案 0 :(得分:2)
无限会话本身并不比会话实现安全,但它确实允许攻击者有更多时间来利用。例如,随着无休止的会话,会话劫持变得更容易,因为攻击者有无限的时间。它还允许强制执行会话,但是如果给出足够复杂的会话令牌,那么这也不是问题。
基本上,它可以/将使现有漏洞更容易被利用,但不会削弱实现本身。
答案 1 :(得分:2)
会话超时的主要原因是能够在某个时刻删除与会话关联的任何服务器端存储数据。否则,您的会话存储将永远增长,并且您永远不会能够在某个时刻删除任何存储的数据。
当然,会话持续的时间越长,攻击者就越有可能猜出会话的ID并可能劫持它。但是,可以通过偶尔更改会话ID来轻松减轻这种情况。
答案 2 :(得分:2)
主要风险是如果会话标识符永不过期,则会有效地成为密码。有权访问会话标识符的任何人都可以脱机记录,然后在以后使用它来登录该应用程序。例如,有人可以从cookie中复制会话令牌,只需访问用户的机器即可。
缓解此问题的方法是定期轮换会话标识符。也许你可以有一个每10分钟触发一次的AJAX请求并为当前会话获取一个新令牌 - 即使标准会话到期时间(例如10-20分钟),这也足以使会话保持活动状态表格提交前没有超时。
暴力强制不是问题:只要会话标识符具有足够的熵,那么这种暴力强迫的风险就很小。 OWASP guidance here on selecting a strong method for session identifier generation
在安全方面,性能方面的更多内容是,如果您为每个会话在内存中存储对象,那么最终内存将随着会话数量的增加而填充。
长会话的另一个风险是任何CSRF或XSS漏洞都有很长的开发时间。如果用户访问了针对您的应用的恶意网站,则短会话超时可以缓解任何攻击,因为用户不会进行身份验证。即使使用持久登录,如果你有一个长期的刷新令牌,也可以减轻这种情况。短期(即会话)"访问令牌"如果您的站点已被充分锁定(例如,它只允许具有CSRF保护的请求本身为访问令牌交换刷新令牌)。
例如,如果存在CSRF漏洞:
[User] --> [Attacker's Site] --> [Your site]
Browser --> Malicious Page builds form for your site --> Submits form via AJAX
如果用户曾使用浏览器访问过您的网站,那么无休止的会话超时会导致此攻击成功。
但是,如果您有两个会话令牌:刷新令牌和访问令牌,并且您需要访问令牌来提交表单,这样可以防止攻击。由于访问令牌只能通过同一站点请求进行检索,因此请确保此请求的处理程序受到足够的CSRF保护,这将缓解您网站上可能存在的其他漏洞。
因此,如果您必须使会话无限,请使用必须交换的其他令牌以便对您的网站进行身份验证。 请参阅this post了解如何实施"记住我"功能(又名我们的刷新令牌)。缺点是您必须自己实现刷新令牌以访问令牌逻辑,并要求用户必须使用访问令牌再次发送任何请求(可以使用带有JavaScript的客户端逻辑实现)。