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