php中的会话安全性以及需要注意的事项

时间:2014-03-24 15:29:23

标签: php security session

这已被问过很多次了。我很好奇是否认为以下代码提供了相当重要的安全级别。还有其他如果我应该考虑一下吗?

一些假设:

  1. 如果用户在5秒内没有做任何事情,请将他退出。
  2. 如果用户不是来自somePage.php,请将他登出。
  3. 如果用户IP地址发生变化,请将其注销。
  4. 以下代码:

    <?php
    session_start();
    $time = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    
    if ($time - $_SESSION['time'] > 5)
    {
        //function to log out user...//echo "logged Out,Time";
    }
    elseif ($ip !== $_SESSION['ip'])
    {
        //function to log out user...//echo "logged out,IP";
    }
    elseif ($_SERVER['HTTP_REFERER'] !== "http://server.com/somePage.php")
    {
        //function to log out user...//echo "logged out,Refer";
    }
    else
    {
       //do sensitive stuff
    }
    $_SESSION['time'] = $time;
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    ?>
    

    编辑:

    这只是“敏感”领域的一些基本内容。可能是Facebook级别。我不希望任何人进入谁不应该。但如果他们这样做了,就会出现一些问题,但是核弹头不会发动。

    5秒是我测试的例子,显然它会更长。

    布赖恩,

    如果$ _SERVER可以被欺骗,是否有更好的方法来确定用户的源ip?

1 个答案:

答案 0 :(得分:1)

  

一些假设:

     
      
  1. 如果用户在5秒钟内什么都不做,请注销他。
  2.   
  3. 如果用户不是来自somePage.php,则将其注销。
  4.   
  5. 如果用户的IP地址发生变化,请注销他。
  6.   

您将使您的用户(可能不是唯一的男性)疯狂。尤其是Tor用户。

实现secure PHP sessions所需要做的事情很少:

  1. 使用CSPRNG生成会话ID。
  2. 使用HTTPS。
  3. 使用HttpOnly cookie(因此JavaScript对它们不可见)。
  4. 使用安全cookie(因此仅在HTTPS中可用)。
  5. 在用户登录或注销时,在分配新的会话变量值之前,请使用session_regenerate_id(true);