【问题标题】:PHP Session security key stepsPHP Session 安全密钥步骤
【发布时间】:2017-07-09 22:32:50
【问题描述】:

PHP 登录系统后,我正在努力进行登录和用户验证。我知道基础知识,但我不确定我是否做得对。我会试着一步一步解释。

  1. 我有一个用户名和密码表单。
  2. 用户输入他们的登录名和密码后,我使用LDAP 身份验证来授权他们。如果身份验证通过,那么我需要开始新的会话。
  3. 新会话(这就是我苦苦挣扎的地方)。

    if ($validation->ldap_authentication())
    {
       $session = new session();
       $session -> login($validation->getUsername(),     $validation->logedAs(), $validation->getSID());
       if($session->validate_login())
       {
           exit(header('Location:index2.php'));
       }
       else
       {
           echo 'error';
       }
    }
    

还有我的session class

class session
{
    public function __construct()
    {   
     if(!isset($_SESSION)) 
    { 
        session_name(SESSIONNAME);
        ob_start();
        session_start();       
    } else {
        session_regenerate_id(true) ;
    }
}

    public function login($sessionUserName, $logedAs, $sid)
    {
        $_SESSION['logedUserName'] = isset($sessionUserName) ? $sessionUserName : null;
        $_SESSION['logedAs'] = isset($logedAs) ? $logedAs : null;
        $_SESSION['sid'] = isset($sid) ? $sid : null;
    }


    public function validate_login()
    {
        if (!isset($_SESSION['logedUserName']) || (trim($_SESSION['logedUserName']) == '') ||
               !isset($_SESSION['logedAs']) || (trim($_SESSION['logedAs']) == '')    ||
               !isset($_SESSION['sid']) || (trim($_SESSION['sid']) == '')         
                    )
        {
            return false;
        } else {
            return true;
        }

    }
}
  1. 所以在其他页面中我需要开始一个类session(再次)并验证validate_login()
  2. 对我来说,它看起来真的很糟糕的身份验证。

我需要添加和改进什么?

我已经在网上搜索过,但找不到答案,也不知道我究竟需要改进什么。

【问题讨论】:

  • 第一:我不明白你为什么只在没有设置会话时才做ob_start()?第二个 session_regenerate_id() 每个请求只应调用一次,您的代码在 session stackoverflow.com/questions/22965067/… 的每个新实例上执行此操作
  • 我建议你先了解一下会话的概念。您需要做的就是检查会话是否存在,如果不重定向到登录屏幕,如果是,则重定向到索引或您想要的任何地方。您可以添加一个检查,如果 $_SESSION['logedUserName'] 为空,则登录屏幕,否则继续。
  • @JustOnUnderMillions 所以如果我明白我需要打电话session_regenerate_id(true) 如果 validate_login 是真的?
  • 并非如此,您可以使用session_regenerate_id(true) 来进一步保护您的会话,但这并不是真正需要的。阅读上面链接中的 QA。
  • @user3686909 或者更好:如果你使用session_regenerate_id(true) ;,下一页请求会获得一个带有新 id 的新会话 cookie。所以会话不能被黑客入侵。因此,无论用户是否登录,每次请求都可以执行一次session_regenerate_id(true) ;。希望能说明这一点。

标签: php html authentication ldap


【解决方案1】:

我是 PHP 初学者,所以我的回答可能毫无价值。

我认为您可以信任存储在$_SESSION 中的变量,因为只有服务器可以访问它们。所以你可以有一个布尔值$_SESSION['loggedIn'],让你知道用户已经成功完成了登录过程,并且可以从任何页面访问这个变量。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2013-08-05
    • 1970-01-01
    • 2012-01-08
    • 2013-09-12
    • 2013-08-09
    • 2020-04-15
    • 2017-08-11
    • 2011-10-14
    相关资源
    最近更新 更多