【问题标题】:PHP how to start a secure sessionPHP如何启动安全会话
【发布时间】:2012-09-07 12:55:32
【问题描述】:

目前我正在如下开始一个会话:

if ($hasher->CheckPassword($password, $hash)) { //$hash is the hash retrieved from the DB 
        $what = 'Authentication succeeded';
            $_SESSION['username']=$_POST['username'];
         header('Location: securedpage1.php');
    } else {
        $what = 'Authentication failed';
        echo "Incorrect Password";
        include 'login.php';
        exit();

    }

如您所见,我想知道$_SESSION['username']=$_POST['username']; 是否是开始会话的最佳方式,或者是否有更好的做法

感谢您的回复!

【问题讨论】:

  • 我会检索用户的 ID 并将其存储在会话中。我希望我的会话数据被认为是理智的,有效的 ID 就是一个例子。
  • 感谢您的回复,您能否解释一下我将如何检索用户 ID 并将其存储在会话中?
  • 什么是“安全会话”,为什么您认为当前会话不安全?
  • 不,我需要知道您的应用程序。我假设您有一个数据库后端,并为每个注册用户分配一个唯一的(通常是数字的)ID,这是一种常见的设置。如果您不使用 ID,那么用户名也可以,只要您确保它对应于实际用户即可。
  • 让消息只是说用户名/密码组合不正确(或类似的话)。否则黑客至少知道用户名是正确的。

标签: php mysql security session login


【解决方案1】:

您可以使用数据库而不是文件系统作为存储点来滚动您自己的会话处理程序。这有几个安全优势,例如在共享主机上,存储在文件系统中的会话数据可能会受到损害。正如我在评论中提到的,您还可以以这种方式存储“源”IP 地址并将其绑定到会话,并使从原始 IP 以外的 IP 访问的任何会话无效。

这篇文章讲解的很详细:http://shiflett.org/articles/storing-sessions-in-a-database

【讨论】:

  • 感谢您的回复,这是我一直在寻找的,对于我缺乏正确的术语,我深表歉意!
【解决方案2】:

$_SESSION['username']=$_POST['username']; 实际上并没有启动会话,session_start() 会。所以你的问题放错地方了。

这行代码本身并没有错。

如果您想了解有关编写安全会话代码的一些信息,可以从这里开始:http://phpmaster.com/php-sessions/

您可以搜索的两个安全关键字是“会话固定”和“会话劫持”。另外两个常见的安全问题是 XSS 攻击和 CSRF 攻击。

stackoverflow 上已经有很多关于这个主题的问题,你应该搜索一下。 For instance.

【讨论】:

  • 谢谢,我再次为没有正确陈述问题而道歉,这对我有很大帮助!非常感谢
【解决方案3】:

示例中没有显示,但我认为session_start() 在您的代码中某处?您可以在此处了解有关会话开始的更多信息:PHP Manual: Session Start

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2011-11-06
    • 2011-04-01
    相关资源
    最近更新 更多