我编写了一个简单的自定义会话处理程序(在 MySQL 中,但这不相关),它只是将序列化的会话数据、会话 ID 和当前时间保存到表中。
虽然会话存在,但会话 id 对攻击者来说就像密码一样有价值,这让我相信我应该以某种方式对其进行加密。
是否值得在将会话 ID 存储到数据库之前对其进行哈希处理,以迫使攻击者暴力破解会话 ID 以伪造 cookie?
我的站点已经对所有连接使用 HTTPS。
因此,您要防止的是,如果攻击者从您的数据库中访问会话 id 的转储,他可以冒充任意用户,因为他可以按原样使用会话 id。为此,以与哈希密码相同的方式对 id 进行哈希处理实际上是一个非常好的主意,因此可以进行单向查找,但哈希值本身已变得无用。由于会话 ID 通常也会很快过期,因此暴力破解几乎没有用处。
另一方面,由于会话 ID 通常会很快过期,因此一开始可能没有太多意义。攻击者的机会之窗非常小。攻击者能够从您的数据库中获取会话 id 转储这一事实的重量要重得多,而且是更严重的破坏,因为这意味着攻击者可能已经可以访问其他数据。
它仍然是一个有价值的防御,几乎没有缺点(轻微的计算开销,会话 id 的调试稍微复杂一些)。