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