PHP 会话不安全?需要另一种方法


PHP sessions unsafe? Need another method

所以我被告知这种方法不安全,因为人们可以伪造会话并使用它的变量。
这是我脚本的一小部分:

<div class="panel-body text-center">
    <?php
        if(!isset($_SESSION['steamid'])) {
            steamlogin(); //login button
        }
        else
        {
            include ('steamauth/userInfo.php');
            include ('db.php');
            $mysqli = mysqli_query($db,"UPDATE `users_steam` SET name='".$steamprofile['personaname']."', avatar='".$steamprofile['avatarfull']."' lastseen='".time()."' WHERE steamid='".$_SESSION["steamid"]."'");
            echo "<img class='img-responsive center-block rounded' src='".$steamprofile['avatarmedium']."' title='' alt='' /></img><br>"; // Display their avatar!
            echo "<span>".$steamprofile['personaname']."</span>";
            logoutbutton();
        }
    ?>
</div>

如果用户未登录,则会显示登录按钮。如果相反,那么我显示他的头像和名字,并更新我的数据库。
$_SESSION['steamid'] 变量用于用户 STEAM ID,当用户通过 Steam 登录时检索。除了 $_SESSION 变量之外,还有其他方法可以包含此 ID 并在我的网站中进一步使用它吗?
谢谢

您确实可以窃取会话,但您必须了解,要做到这一点,您首先必须从客户端窃取包含会话ID的cookie,这非常困难。

无论如何,使其更安全的一些事情是:

  • 使用SSL,它会加密包括会话cookie在内的所有内容,从而无法窃取流量监控。
  • 验证会话 Cookie 时使用多个条件,而不仅仅是 ID。 检查 IP 地址、浏览器以及您能想到的任何内容
  • 在 Cookie 上设置一个积极的过期时间,如果上面的条件之一不匹配,请立即使其失效。
  • 每次用户访问您的页面时,创建一个新会话,并在销毁旧会话之前传输旧会话中的数据。确保同时生成不同的会话 ID 并将其存储在 Cookie 中。

Web开发方面,没有绝对的安全性。您必须接受这样一个事实,即无论您做什么,都可以模拟受感染或受监视的用户。我们现在唯一真正安全的东西是SMS令牌,这在较小的网站上可能会带来不便。你能做的最多就让它尽可能难做到。

为了确保您的页面是安全的,您应该存储一个会话像这样的变量:

if( $_SESSION['logged_in'] )
{
     // your Code
}

这意味着只有登录用户才能看到。

现在要伪造会话变量,这是不可能的。最重要的是,会话变量不存储在客户端计算机上,它们仅存储在服务器上。客户端的机器得到的只是会话ID,它通常存储在cookie中。