没有cookie的安全会话管理

时间:2016-01-28 07:05:02

标签: security cookies session-cookies

几个月前,我参观了一个安全研讨会,我们讨论了使用cookie进行会话管理时的一些安全问题。 有人告诉我,饼干原本不是为处理会话而设计的。 但是应该怎么做呢?

2 个答案:

答案 0 :(得分:2)

这样做的一种安全方法是生成一个加密随机128位值(即CSPRNG生成的随机值),然后将其作为POST数据传递给每个页面。

e.g。

<form method="post" action="/globalHandler">
  <input type="hidden" name="sessionId" value="<sessiontoken>" />
  <input type="hidden" name="page" value="accountDetails" />
</form>

优点是会话标识符永远不需要在cookie中传输,减轻了POODLEBREACH等SSL攻击(攻击者无法注入请求,因为他们没有会话标识符)。这本身也可以防止CSRF攻击。

缺点是登录时要访问的每个页面都只需要通过POST方法访问,其中可以在sessionId参数上进行适当的验证。因此,最好在网站首次开发时使用,而不是更改现有网站以适应此格式。

使用POST数据比GET更安全,因为使用GET时,详细信息将位于URL的查询字符串部分中。 e.g。

https://example.com?sessionId=1234...

这不仅使会话标识符在用户屏幕上可见,而且还可以通过referer标头泄露,并且默认情况下也会在浏览器历史记录,代理和服务器日志中记录。默认情况下很少记录POST数据。

有些银行使用此方法确保用户在会话期间只有一条活动路径 - 会话标识符可以轻松轮换,这样,如果用户关闭不同的路径,则其标识符不匹配,并且退出了。当您具有必须按设定顺序执行的多步骤过程时,从安全角度来看,这很有用。当用户采用与开发人员期望不同的路径时,可能会出现一些业务逻辑漏洞。

答案 1 :(得分:1)

Cookie仍然是会话管理的最佳方式。请注意cookie的局限性。为了获得更好的结果,请使用无法通过http传输的Secure Cookies,仅使用https。例如,如果页面上存在对不安全图像的引用,则更难以意外泄漏。