2011-05-06 77 views
12

我不太确定$_SESSION如何在PHP中工作。我认为它是浏览器上的一个cookie,与服务器上的唯一密钥匹配。是否有可能通过仅使用会话来识别用户的通过登录来伪造该通知。伪造会话/ Cookies?

如果$_SESSION不能这样工作,有人可能会假冒cookie和绕过登录?

回答

19

是的。

唯一标识用户的是随每个请求一起发送的伪随机值。 如果攻击者可以猜出正确的发送值,他可以作为别人冒充。

有不同的方式,使这个困难:

  • 化妆会话ID更长(多熵,更难猜测)之类的用户代理(实际上更多的熵)
  • 明显
  • 检查其他信息:使用一个好的随机数发生器
  • 过期会话可以在任何时候提供一组较小的有效会话ID
  • 更新会话ID通常甚至是有效的ID
  • 使用SSL加密所有通信,以避免彻底的cookie劫持
+1

+1好的列表:) – alex 2011-05-06 00:46:02

6

默认情况下,PHP中的会话将数据存储在服务器上的文件中(/tmp),并存储标识符cookie,通常为PHPSESSID(它将是一个十六进制数字,例如f00f8c6e83cf2b9fe5a30878de8c3741)。

如果你有他人的标识符,那么你理论上可以使用他们的会话。

但是,大多数站点会检查以确保用户代理是一致的,并且还会重新生成会话标识符,以减少这些问题。

至于猜测会话,这是可能的,但极不可能。猜测信用卡号码会更容易(较小的字符池(0-9超过0-9a-f)以及验证它的校验和)。当然,你也需要过期和安全代码。

+0

任何想法,只是设置cookie? – Pwnna 2011-05-06 01:05:36

+0

@ultimatebuster我不确定你的意思是对不起。 – alex 2011-05-06 01:10:06

+0

而不是使用$ _SESSION来识别,我的意思是使用cookie来识别。 – Pwnna 2011-05-06 01:10:40

1

正确实施,会话id非常长且足够随机,使猜测不可行(尽管如果你能够猜测特定用户的会话ID,那么是的,你将作为该用户)。然而,你可以嗅探和劫持会议 - 这是firesheep所做的:http://en.wikipedia.org/wiki/Firesheep

+0

eek。这给了我一个非常难堪的恐慌。我会更仔细地从现在开始,通过cookies和会话吐出什么。 – Partack 2011-08-03 02:57:30