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
}

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

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