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

时间:2013-08-24 18:29:31

标签: php security login

我正在使用此处的脚本: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;        

}

我不确定它是否可能,但是如果我搞砸了cookies并设置了username = x并且很幸运并将is_logged_in设置为1可以让用户访问?我确定有一个更安全的验证会话的方法或者自己做cookie也有自己的验证类型,比如检查机器哈希,并且哈希值也必须与我们存储在服务器上的哈希相匹配?我应该使用一个名为iftodaywasarainyday的随机字符串而不是像user_logged_in这样简单的东西,而只是在内部对它进行评论,这样我知道该值与我的is_logged_in相对应,或者甚至是重要的。

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

1 个答案:

答案 0 :(得分:4)

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