【问题标题】:PHP user sessionsPHP 用户会话
【发布时间】:2011-03-03 01:28:55
【问题描述】:

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

【问题讨论】:

  • 澄清一下,您是使用$_SESSION 存储数据,还是使用您自己的cookie?
  • 所以您更愿意询问您的身份验证系统。
  • 对不起。我在问我是否可以信任 php 会话。从来没有像以前那样使用过它们,我意识到有这样的东西我已经自己写了好几次并且一直在变得更好,但是我再次需要写一个相当大的网站。所以我只是在看选项。
  • 会话是安全的。只是不要在其中存储密码和信用卡#。

标签: php session


【解决方案1】:

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

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

您可以configure PHP 使用不同的哈希算法,或者如果您不相信 PHP 能够正确执行此操作,您甚至可以将您的 own algorithm to create the session ids 用于 PHP 的会话系统。

【讨论】:

  • 谢谢。所以我使用哪一个并不重要。区别似乎是我将它存储在mysql和php中的一个文件中。
  • "你必须获取会话 ID 才能窃取会话" - 错误,请阅读会话固定
【解决方案2】:

在 cookie 中存储数据与使用 PHP 的会话是非常不同的。 Cookies 在客户端存储数据;会话在服务器端存储数据,这有很多好处:

  • 用户看不到
  • 用户不能修改
  • 浏览器不需要在每次请求时都将数据发送到服务器

通常 PHP 会话确实将会话密钥存储为 cookie(尽管它们不是必须的),但是您真正关心的数据都不会发送给用户,它存储在服务器上并使用会话密钥

【讨论】:

  • 现在我想知道如果会话密钥没有存储为 cookie,服务器将如何注意到用户是谁?对于我的系统,基本上如果用户修改会话 cookie,他就会被注销。用户实际上不知道我是如何生成会话密钥的,所以他是否看到它并不重要。我的系统还将会话密钥存储在服务器中以确认 cookie。
  • @Temek 好吧,客户端必须以某种方式告诉服务器会话密钥,它只是不需要存储在 cookie 中;另一种主要方式是GET parameter
  • 啊,是的。愚蠢的我。我以为您是在说客户端根本不需要会话数据。 :) 很抱歉造成混淆。
【解决方案3】:

我不确定 php 自己的会话系统有多安全

而且世界其他地方都不确定您的安全性如何。很多人看过 PHP 中的会话处理程序,并没有发现任何实现中的缺陷。它也很好地表征和集成,但支持用户定义的处理程序的概念。

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

C.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2012-05-11
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多