将语义上有意义的数据放入 HTTP 会话标识符有什么风险?

信息安全 http 饼干 会话管理
2021-09-04 08:06:15

我目前正在研究性能优化,并正在考虑一种加速基于 cookie 的会话处理的方法。当没有服务器端数据被它引用时,拥有一个会话标识符是有好处的。我正在尝试确定是否将指示器附加到会话 ID 以显示是否有服务器端数据是一个好主意。这将避免在某些情况下尝试获取不存在的数据的需要,并且可以进一步扩展到其他简单情况(例如,区分不同的服务器端会话数据存储后端)。

例如,当用户第一次访问一个站点时,他们会得到一个会话 id 'abc' 并且......

Set-Cookie: sessionid=0abc;  HttpOnly

将任何数据添加到会话时......

Set-cookie: sessionid=1abc; HttpOnly

显然,服务器端数据的存在/不存在对于窃听者来说是显而易见的。并且 cookie 有可能被篡改,使其看起来与服务器端数据相关联——但在这种情况下,最糟糕的事情是它的行为方式与当前会话的行为方式相同。

我还注意到,在欧盟,我们现在必须在删除任何非关键 cookie 之前征求用户的同意。

此外,我不建议使用 3 个字母的会话标识符!除了一个小存根之外,会话 id 的其余部分将继续遵循本质上是随机数据的通常做法。我假设在存根更改的地方重新生成它没有任何好处。

但是任何人都可以看到我看不到的问题吗?

1个回答

如果您仅将其用作加速器标签,那么我看不出有任何不这样做的理由。您已经提到您考虑过调整此 cookie 数据的可能性,因此,如果您已经在考虑这种可能性来设计您的用户标识(当它适用时),它真的不应该是一个额外的安全问题。

至于那个欧盟“cookie指令”,这里是它的一个快速摘要:

法律要求公司在以可能被视为“侵入性”的方式使用或存储数据之前获得“明确同意”。

IANAL适用,但在我的书中,一个既不会占用太多空间/带宽,也不会以任何方式识别或帮助识别用户的“侵入性”加速器,确实不属于这种“cookie 偏执狂”类别。如果有的话,它是为了最终用户的利益。但可以肯定的是,您应该咨询您为其设计解决方案的公司的律师,因为他们将负责他们的服务如何运作。无论如何,您都需要通知用户在网站上使用 cookie(“本网站使用 cookie……等等,等等,等等……”),

“会员国应确保只有在有关订户或用户同意的情况下,才允许在订户或用户的终端设备中存储信息或访问已存储的信息。提供清晰而全面的信息。”

以便通知可以指向描述每个 cookie 值的页面。描述性不是太强,本身就是一个安全问题,但足以帮助用户清除它的想法。有关此“cookie 法”的任何其他要求实际上取决于您将使用哪些其他 cookie 以及用于什么目的。

我能想到的唯一另一个“问题”是,您应该考虑到用户可能会在使用您网站的任何阶段随机启用/禁用甚至删除 cookie(尤其是法律要求提醒他们的所有这些警告)他们应该比它的价值或心理健康更偏执),并且这种切换本身不应该对您的代码如何运行产生任何问题。简而言之,您不应该依赖任何 cookie 值,而应将它们视为“帮助者”,正如您建议的那样,无论如何您已经这样做了。