2010-06-12 97 views
0

我有点困惑。我一直在用我自己的会话系统构建我的网站,但我不确定PHP自己的会话系统有多安全。我的会话系统通常只有用户名和相当苛刻的散列,它不包含用于生成的用户名或密码。我将散列保存在用户数据库中,并作为cookie来确认每次页面加载时的用户会话。所以我的问题是我可以相信PHP会话还是继续使用我自己的?PHP用户会话

+0

为了澄清,您是使用'$ _SESSION'来存储数据,还是使用您自己的Cookie? – TheDeadMedic 2010-06-12 18:25:56

+0

我自己的饼干。 – TMKCodes 2010-06-12 18:30:45

+0

所以你问的是你的认证系统。 – Gumbo 2010-06-12 18:41:32

回答

1

PHP将一个唯一的会话ID保存在一个cookie中,并将所有与会话相关的值存储在服务器自己的文本文件中。您必须获取会话ID才能窃取会话,这意味着您必须从受害者的计算机上窃取会话Cookie。 PHP自己的系统至少和你自己建立的系统一样安全

不同之处可能在于通过暴力来找到活动会话有多困难。这完全取决于哈希算法和随机数生成器。

你可以使用不同的散列算法,或者你可以使用你的own algorithm to create the session ids用于PHP的会话系统,如果你不相信PHP做到这一点。

+0

谢谢。所以,我使用哪一个并不重要。差异似乎是我将它存储在一个文件中的MySQL和PHP。 – TMKCodes 2010-06-12 19:13:36

+1

“你必须获得会话ID来窃取会话” - 错误的,请阅读会话固定 – symcbean 2010-06-12 23:25:33

0

将数据存储在cookie中与使用PHP的会话相比是非常不同的。 Cookies在客户端存储数据;会话存储数据的服务器端,它具有许多优点:

  • 用户无法看到它
  • 用户不能修改
  • 的浏览器并不需要发送的数据向服务器发送每个请求

通常PHP会话确实将会话密钥存储为cookie(尽管他们不需要),但您实际关心的数据都不会发送给用户,而是存储在服务器上并使用会话密钥查找

+0

现在我想知道如果会话密钥没有存储为cookie,服务器如何注意到用户是谁? 与我的系统基本上,如果用户将修改会话cookie,他会刚刚注销。用户实际上无法知道我是如何生成会话密钥的,因此如果他看到它并不重要。我的系统还将会话密钥存储在服务器中以确认cookie。 – TMKCodes 2010-06-12 18:47:34

+0

@Temek好吧,客户必须以某种方式告诉服务器会话密钥,它不需要存储在cookie中;另一个主要方式是作为[GET参数](http://us2.php.net/manual/en/session.idpassing.php) – 2010-06-12 18:58:37

+0

啊耶。愚蠢的我。我以为你在说客户端根本不需要有会话数据。 :)抱歉混淆。 – TMKCodes 2010-06-12 19:03:22

0

我不知道如何确保PHP自己的会议系统是

和世界其他地区是不知道你的安全性如何。很多人已经看过PHP中的会话处理器,并没有发现任何实施中的缺陷。它也很好地表征和集成,但支持用户定义的处理程序的概念。

我建议使用标准会话代码 - 但您可能想编写自己的处理函数。

C.