0

我使用这里的脚本: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 并且很幸运并将 is_logged_in 设置为 1 是否可以让用户访问?我确定有一种更安全的方法来验证会话,或者 cookie 本身是否也带有自己的验证类型,例如检查机器哈希,并且该哈希也必须与我们存储在服务器上的哈希匹配?而不是像 user_logged_in 这样简单的东西,我应该使用一个名为 iftodaywasaraanyday 的随机字符串,并在内部对其进行注释,这样我就知道该值与我的 is_logged_in 对应的是什么,或者它甚至重要。

我会对该主题进行更多阅读,但我想我接受了作者的话,因为页面上的前 3 个词是“简单、干净和安全”,并且该网站看起来确实不错,但因为我正在重构代码有很多 todo 语句让我担心它正在进行的工作而不是完成的脚本

4

1 回答 1

4

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

于 2013-08-24T18:36:23.770 回答