【问题标题】:How to set up a secure PHP Session如何设置安全的 PHP 会话
【发布时间】:2011-04-01 15:06:21
【问题描述】:

与我之前的问题类似——我不是一个非常有经验的 PHP 程序员。我对会话或安全性一无所知(除了我一小时前学到的关于 md5 和 sha1 和 salt 的知识)。

我有一个登录系统,我希望创建一个会话来存储用户用户名的加密字符串和时间戳。我知道如何创建字符串,但我对 Sessions 或它们如何工作一无所知。

过去一个小时我在谷歌上搜索了一个解决方案,但它们似乎都太基本或过时了,我正在寻找具有具体安全性但也很简单的东西(由于我的经验不足)。

假设此字符串已加密,我将如何(在管理页面上)检查用户是否已登录?

我知道有类似的问题,但我需要从一个完全外行的角度来回答,因为我不知道如何实施这个解决方案。

感谢您提供的任何帮助

【问题讨论】:

  • 感谢大家的cmets和帮助,我想我现在已经弄清楚了!干杯,丹

标签: php security encryption cookies session


【解决方案1】:

我希望创建一个会话来存储和加密他们的用户名字符串

为什么?除非您正在解密它,否则使用散列甚至随机值没有任何优势。如果您要解密它,那么密钥也必须存储在您的数据中 - 所以它只是默默无闻的安全性。

假设此字符串已加密,我将如何(在管理页面上)检查用户是否已登录?

在通过身份验证之前,不要将用户名存储在会话变量中。然后,如果填充了变量,您就知道用户已通过身份验证。

【讨论】:

  • 顺便说一句,您已经有一个与会话关联的随机值 - 会话 ID。
  • 哦,我以为我必须手动设置会话 ID。因此,如果我想识别特定用户,我可以: $_SESSION['username']=$username;然后在另一个页面上我可以输出: echo "Hello" 。 $_SESSION['用户名'];是这样吗?
  • @Daniel 是的,就是这样。
  • 我是否正确地说当用户 B 登录时,$_SESSION['username'] = $username 不会被覆盖,因为每个 $_SESSION 都针对它的会话 ID 存储,这对于每个会话开始?
  • 是 - 否则 $SESSION 不会描述会话 - 它会描述整个系统
【解决方案2】:

用户登录后,将其标识符存储在会话中。在管理页面上,读取此会话值并使用它来查询数据库以确定用户是否具有管理员权限。如果他没有显示错误。

显然,这允许变化(例如,在会话中存储一个 User 对象,该对象已经包含有关用户管理状态的信息)。

$_SESSION 中的数据不能(除非您做一些非常愚蠢的事情)被客户端篡改,因为它存储在服务器中。你不需要加密或散列任何东西。

【讨论】:

    【解决方案3】:

    有多种方法可以保护 PHP 会话,但首先必须了解需要什么级别的安全性以及他/她最终实现的目标。

    这是 Corey Ballou http://www.jqueryin.com/2009/11/20/php-secure-sessions/ 的博客文章,我想这足以消除您对保护 PHP 会话的疑虑。

    【讨论】:

      猜你喜欢
      • 2016-04-08
      • 2012-04-27
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2011-05-05
      • 2018-06-13
      • 2012-07-22
      相关资源
      最近更新 更多