如何在cookie中加密会话ID?

时间:2010-04-11 00:13:18

标签: php session-hijacking

在我阅读有关会话劫持文章时,我了解到加密存储在cookie中的会话ID值会很好。

据我所知,当我通过调用session_start()启动会话时,PHP不会加密cookie中的会话ID值。

如何加密会话ID值,然后用它初始化会话?

8 个答案:

答案 0 :(得分:19)

加密无济于事。无论如何,会话cookie只是一个神奇的数字。加密它只是意味着有一个不同的魔法数字来劫持。根据您所考虑的劫持方案,还有其他可能的缓解措施。例如,您可以将会话限制为单个IP。这会带来一些问题,例如:人们在无线点之间切换。

答案 1 :(得分:5)

更重要的是,您的会话ID是随机的(也就是说,某人无法使用他们的会话ID来猜测其他人的身份),因为真正的危险是有人抓住了另一个用户的会话ID。只要你保持它们真正随机,就没有理由或实用程序来加密它

答案 2 :(得分:3)

假设您的会话cookie是GUID,则没有必要对其进行加密。它只会将一个伪随机字符串替换为另一个伪随机字符串。

答案 3 :(得分:1)

不幸的是,加密会话ID并不会增加安全性,因为攻击者只能使用加密形式(这是他们唯一可见的东西)。

这可能阻止的唯一方法就是向某人发送一个链接?PHPSESSID = foo,这将导致PHP创建该会话。您可以通过使用加密和验证来防止这种情况,但您应该完全关闭URL中的会话ID传输。

答案 4 :(得分:1)

制作此脚本,从网络浏览器访问,然后检查您的Cookie。

<?php
  session_start();
?>

您可能会看到类似这样的内容

Site         Cookie      Value
mysite.com   PHPSESSID   6fktilab3hldc5277r94qh2204

如果生成一个漂亮的唯一ID,PHP可以很好地完成工作。加密这个没有意义。

答案 5 :(得分:1)

永远不要仅依赖于一个cookie或项目来验证您的(登录)用户,这总是一个好主意。如上所述,最好还存储IP并进行检查。一个很好的补充是存储USER_AGENT。

请记住,如果您的应用程序是开源的,那么您就可以单独使用会话ID,因为黑客可以轻松识别您正在验证的内容。

答案 6 :(得分:0)

会话ID相对不可思议,所以这不是问题。

你可以做些与此相关的事情来抵消攻击:

  • 在用户登录时创建新会话
  • 限制会话的长度

还有很多其他的事情。我总是建议在这些问题上研究Rails Guide - 它提供了对已知问题和对策的非常容易理解的解释 - 所有这些都同样适用于PHP代码。

答案 7 :(得分:0)

使用cookie存储敏感信息时加密cookie数据是有意义的。只有服务器应该读取(解密)。

没有理由加密会话ID,因为黑客可以使用加密的会话ID来冒充他的受害者。