PHP脚本使用会话数据进行登录,是否存在安全风险


PHP Script using session data for login, is it a security risk

im使用脚本:http://www.php-login.net

我修改了它以满足我自己的需求,但我在脚本中看到了这一部分:

// if user has an active session on the server
    elseif (!empty($_SESSION['user_name']) && ($_SESSION['user_logged_in'] == 1)) {
        $this->loginWithSessionData();      
        // checking for form submit from editing screen
        if (isset($_POST["user_edit_submit_name"])) {
            $this->editUserName();
        } elseif (isset($_POST["user_edit_submit_email"])) {
            $this->editUserEmail();
        } elseif (isset($_POST["user_edit_submit_password"])) {
            $this->editUserPassword();
        }

我不太确定会话变量是如何工作的,因为在服务器上,从技术上讲,它们不能直接更改,但这部分代码表明,如果有人破坏了cookie,它可以间接更改。

private function loginWithSessionData() {
    $this->user_name = $_SESSION['user_name'];
    $this->user_email = $_SESSION['user_email'];
    // set logged in status to true, because we just checked for this:
    // !empty($_SESSION['user_name']) && ($_SESSION['user_logged_in'] == 1)
    // when we called this method (in the constructor)
    $this->user_is_logged_in = true;        
}

我不确定这是否可能,但如果我把cookie搞砸了,把username=x设置为lucky,把is_loged_in设置为1,这能给用户访问权限吗?我确信有一种更安全的方法来验证会话,或者cookie本身也有自己的验证类型,比如检查机器哈希,并且该哈希也必须与我们存储在服务器上的哈希匹配吗?与其使用user_loged_in这样简单的东西,我应该使用一个名为iftodaywasarainyday的随机字符串,并在内部对其进行注释,这样我就知道这个值与我的is_loged.in对应什么,或者它是否重要。

我会对这个主题做更多的阅读,但我想我相信作者的话,因为页面上的前3个单词是"简单、干净和安全",这个网站看起来确实很好,但当我重构代码时,有很多todo语句让我担心它的工作正在进行中,而不是一个完整的脚本

会话数据存储在服务器端。实际数据根本不在cookie中。cookie只是一个ID,让服务器知道要加载哪个会话数据。用户不能修改此会话数据,除非您允许他们通过编写代码来修改。