我的安全会话是安全的吗?

时间:2016-04-01 08:00:52

标签: php security session encryption

我非常关注安全性,我正在努力保护我的$ _SESSION。我想你的建议。

  1. 当用户创建帐户时,我会在数据库的个人资料中生成一个随机值11111 - 99999.

  2. 当用户登录时,我创建一个包含大部分用户数据的会话(无密码或任何关键信息)。在$ _SESSION中,我还添加了我在步骤1中创建的随机数的加密版本,我还创建了一个$ _COOKIE,其加密编号与我用来检查会话是否有效相同。

  3. 在我的应用程序上然后当我收到请求时,我检查$ _SESSION是否存在其实它应该存在但是为了防止黑客(猜测或黑客)其他人的会话ID我比较密钥的加密值来自$ _COOKIE与$ _SESSION中的一个。

  4. 主要任务是,这种方法有多安全?我看不出黑客可以通过任何方式窃取$ _SESSION ID并同时加密密钥。

    密钥的加密是由位于服务器上的加密值生成的,而不是简单的md5,在​​我看来很容易重现。因为黑客无法知道我用来加密该密钥的加密值。

    然后在最后,当用户在服务器上发送请求时,它看起来像这样(我简化了代码)。

    if(isset($_SESSION['key'])){
       if($_SESSION['key'] == $_COOKIE['key']){
          // do stuff here
       }
       else {
         die();
       }
    }
    else {
       die();
    }
    

3 个答案:

答案 0 :(得分:1)

确保您的Cookie已过期,并在注销时删除Cookie。

最重要的是,确保会话过期。 否则,有人可以窃取cookie并在以后从另一台机器继续(仍处于活动状态)会话。

我还会在加密中包含用户IP以及使会话唯一的任何其他数据。

答案 1 :(得分:0)

没有必要这样做。 PHP已经为您处理了会话验证。启动会话时,将在客户端创建cookie,在服务器端创建文件。 Cookie包含服务器端的文件名。只要cookie在浏览器或会话中被破坏,会话就会持续。

另见:How do PHP sessions work?

  

在我的应用程序上,然后当我收到请求时,我检查是否   $ _SESSION实际上存在它应该存在但是为了防止黑客(   猜测或黑客)其他人会话ID我比较加密值   来自$ _COOKIE的密钥与$ _SESSION中的密钥

从一开始你就可以session_regenerate_id(true);让攻击者更难以劫持你的会话ID。

有关会话安全的一些读物:

questions/12233406 questions/5081025

答案 2 :(得分:-1)

一般的想法对我来说很好(我不是专家)。

需要考虑的事项: 当cookie不存在时会发生什么?

另一种生成基础值的方法,您可以使用哈希'不知何故,最推荐的可能是mcrypt_create_iv()。 您提到的间隔(11111 - 99999)太窄(在计算时间内);如果你想得到花哨的random.org有适用于随机数的API(不仅仅是伪随机)