2012-09-25 51 views
1

我已经写了一个简单的自定义会话处理程序(在MySQL中,但这不相关),它只是将序列化会话数据,会话标识和当前时间保存到表中。在自定义处理程序中保护PHP会话ID

虽然会话存在,但会话ID与攻击者的密码一样有价值,这使我相信我应该以某种方式加密它。

将数据存储到数据库之前,为了强制攻击者强制使用会话ID伪造cookie,是否值得对其进行散列处理?

我的网站已经对所有连接使用HTTPS。

+0

在stackoverflow上会话ID是“加密”吗?您需要防止来自多个客户端的同一会话的恶意使用,而不是标识符本身。 – zerkms

+0

@zerkms,除非我能读懂会话表,否则我不会知道。 – Martin

+0

因此您的网站上的用户可以阅读会话表? – zerkms

回答

0

所以你要防止的是,如果攻击者从你的数据库访问会话ID的转储,他可以摆出任意用户的身份,因为他可以按原样使用会话ID。对于这一点来说,以散列密码的方式散列id实际上是个不错的主意,所以单向查找是可能的,但散列值本身已变得毫无用处。由于会话id通常很快就会过期,因此在暴力破解中几乎没有用处。

另一方面,由于会话id通常非常快速过期,因此可能没有多少指向。攻击者的机会之窗非常小。攻击者能够从数据库中获得会话id的转储的重要性更加严重,并且是一种更糟糕的攻击,因为这意味着攻击者可能已经可以访问其他数据。

它仍然是一个值得保护的小缺点(轻微的计算开销,稍微复杂的会话ID调试)。

+0

我同意,如果你在黑客有权访问数据库的地方阅读会话ID无论如何你都搞砸了。另外你可以简单地清除会话。在加密敏感数据和实施某种权限升级功能时,您的时间可能会更好。 – James

+0

我确实将会话设置为快速过期,但PHP使用GC机制来清理它们。由于概率的原因,他们有可能活得比我想象的长得多。 – Martin

+0

@Martin您的处理程序可以/应该包含到期检查。 – deceze