2016-02-21 27 views
0

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

<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']变量cointains用户STEAM ID,在用户通过蒸汽登录时检索。除了$ _SESSION变量,还有其他什么方法来包含这个ID并在我的网站中进一步使用它?
谢谢

+1

'所以我被告知这种方法是不安全的 - 请引用 - 我的银行使用会话,所以如果他们如此不安全,我想知道是否向他们投诉或不......如果我这样做,我需要证据支持索赔 –

+0

我听说session_regenerate()会给会话一个新的ID,但我不知道这是否是我的问题的答案。 – Nedas

+0

是的,您可以更改您的服务器上引用某些数据的会话ID,但您需要知道由PHP设置的cookie的确切值。但你不能改变'$ _SESSION []' –

回答

2

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

不管怎么说,有些东西,使其更安全的是:

  • 使用SSL,它加密的一切,包括会话cookie,使得它不可能被窃取槽流量监控。
  • 验证会话Cookie时使用多个条件,而不仅仅是ID。检查IP地址,浏览器,无论你怎么想
  • 在cookie上设置激进的到期时间,并立即使其失效,如果其中一个条件不符合。
  • 每次用户访问您的页面时,都会创建一个新会话并在破坏旧会话之前传输数据。确保生成不同的会话ID,并将其存储在cookie中。

当谈到web开发时,没有绝对的安全性。无论你做什么,你都必须接受这样一个事实:受感染或受监控的用户可以被冒充。唯一的真的我们现在有一个安全的东西是短信令牌,这可能是一个小型网站带来的不便。你能做到的最多的事情就是尽可能地做到这一点。

0

为确保您的网页是安全的,你应该存储会话变量 像这样:

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

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

现在伪造会话变量,这是不可能的。在该会话的顶部,变量不存储在客户端的计算机上,它们只存储在服务器上。客户端机器获得的所有sessionID通常存储在cookie中。