2016-03-06 72 views
2

我正在处理的遗留应用程序让用户填写大量问题,并在调查问卷最后一批保存答案。这个过程很漫长,典型的用户可能会在某个时间点经历一次超时。无休止的会议:任何安全风险?

该团队提出了无限期会议的想法来绕过这个问题。谷歌搜索后,我发现了很多文章解释如何增加超时;然而我没有遇到过揭露这种做法风险的文章。乍一看,我觉得有理由设置超时时间。

我的问题是:

  • 你觉得无尽的会话可能开辟一个安全隐患?
  • 如果是这样做,典型的风险是什么?

回答

1

主要风险是如果会话标识符永不过期,它将有效地变为密码。有权访问会话标识符的任何人都可以将其脱机记录下来,然后稍后再使用它登录到应用程序。例如,有人可以从cookie中复制会话令牌并简单访问用户的机器。

对此的缓解是常规旋转会话标识符。也许你可以有一个AJAX请求每隔10分钟触发一次,并为当前会话获取一个新的令牌 - 即使是标准会话过期时间(例如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的客户端逻辑实现)重新发送任何请求。

+0

你在混合一些东西:[X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options)是为了防止点击劫持;相同的来源政策已经适用于框架。 – Gumbo

+0

道歉,如果我没有让自己清楚。是的,这就是这两件事。但区别在于,如果浏览器启用了第三方Cookie,则浏览器可以在iframe中读取新的cookie,但由于SOP,它不能在XHR中读取。 – SilverlightFox

+0

SOP以相同的方式适用于帧。文档如何能够从不同来源的框架文档中读取cookie? – Gumbo

2

无尽的会话本质上并不比会话实现的安全性低,但它确实使攻击者有更多的时间利用。例如,由于会话劫持变得容易一些,因为攻击者拥有无限的时间。它也会允许强制会话,但是由于生成的会话令牌足够复杂,所以这也不应该成为问题。

基本上,它可以/会使现有的漏洞更易于利用,但不会削弱实施本身。

2

会话超时的主要原因是能够删除与会话相关的任何服务器端存储的数据。否则,您的会话存储将只会一直增长,您会永远不会能够在某个时刻删除任何存储的数据。

当然,会话持续时间越长,攻击者就越有可能猜出会话的ID并可能劫持它。但是,这可以通过现在和当时更改会话的ID轻松缓解。