在我阅读有关会话劫持文章时,我了解到加密存储在cookie中的会话ID值会很好。
据我所知,当我通过调用session_start()
启动会话时,PHP不会加密cookie中的会话ID值。
如何加密会话ID值,然后用它初始化会话?
答案 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来冒充他的受害者。