我可以在应用程序日志中安全可靠地存储 hash(sessionId) 吗?

信息安全 哈希 会话管理
2021-08-31 17:37:27

我正在考虑在每个请求的应用程序日志中存储用户会话 ID 的哈希值。这将允许用户会话轻松地追溯到我们日志中的操作。

我知道存储这是一个潜在的安全风险,如果风险非常低,我可能愿意考虑。为什么会有风险?如果有权访问日志的任何人都可以弄清楚如何获取会话 ID,那么他们基本上可以窃取该用户的会话并以他们的身份登录而无需凭据。

为此,如果我要这样做,最好的方法是什么?

以下是我想考虑的一些事情:

  • 我应该使用哪种哈希算法?它需要很快。
  • 我应该散列什么?会话 ID + 盐?
  • 这有多大风险?我不应该这样做吗?

编辑:我正在考虑只生成一个 GUID 并将其添加到会话创建的用户会话中。然后将其记录下来。这样,它在会话生命周期中始终是唯一的。这样做的问题是它会添加更多的会话数据并为每个用户需要更多的会话内存。使用这种方法,不需要散列,并且仍然可以唯一地跟踪用户的会话。

1个回答

如果会话标识符是从足够大的空间中随机选择的(大约 12 个字节就足够了),那么任何不可逆的哈希函数(甚至 md5)都是安全的,并且不需要盐(这种大小的彩虹表是不可行的)。

展开来说,存储密码哈希时的问题是密码通常具有非常低的熵(与令牌不同,例如会话 ID)。此外,您不关心 md5 认为较弱的其他散列函数属性 - 攻击者无法影响他的会话 id 与任何用户发生冲突,即使他这样做也只会(充其量)让您在研究日志时感到困惑)。