【问题标题】:Storing Session Data Securely With Codeigniter?使用 Codeigniter 安全地存储会话数据?
【发布时间】:2014-04-09 14:04:42
【问题描述】:

对于我的所有项目,我都使用 codeigniter 作为我的框架。我总是使用会话来获取诸如 user_string 和 user_permissions 之类的存储内容,以确定谁可以访问站点内的某些功能和页面。

使用session->userdata 作为基础来提供用户独特的内容是不好的做法吗?

我通常在用户登录时设置一个用户数据数组,如下所示:

$data = array('id' => $user_string, 
              'g' => $user_group);

$this->session->set_userdata($data);

当我确定他们从查询中得到什么结果时,我可能会执行以下操作:

function get_posts(){
    if( $this->session->userdata('g') == 2 ){
        $data = $this->db->get_where('posts', array('' => $this->session->userdata('id') ) )->result_array();
        return $data;
    }
}

此代码是否因为session->userdata('id')session->userdata('g') 而易受攻击?

非常感谢任何评论。

【问题讨论】:

  • 你可以用这个,不用担心!!为了获得额外的安全性,请在您的配置文件中将 sess_encrypt_cookie 设置为 true
  • 不确定你说的是session fixation、Code Igniter 的实现还是会话的整个概念:-?
  • @ÁlvaroG.Vicario 这只是为了确定我在做什么是正确的和好的做法?只是这样我才不会在我的代码中引入坏习惯。

标签: php codeigniter security session user-data


【解决方案1】:

想一想:-
将密钥保存到 application/config/config.php,打开文件并设置

$config['encryption_key'] = "YOUR KEY";

$this->load->library('encrypt');

data = array('id' => $this->encrypt->encode($user_string), 
              'g' => $this->encrypt->encode($user_group),

);

$this->session->set_userdata($data);

获取数据时:-

function get_posts(){
    if( $this->session->userdata('g') == 2 ){
          $id =$this->encrypt->decode($this->session->userdata('id') );
        $data = $this->db->get_where('posts', array('' =>  $id ) )->result_array();
        return $data;
    }
}

【讨论】:

  • 除非我遗漏了什么,否则这可以防止恶意黑客破坏您的服务器并获得对会话目录的写入权限,但不知何故仍然无法读取其他任何内容。这是一个不太可能的情况,不是吗?这就像在黑暗中脱衣服,以防万一陌生人闯入您的房子。
猜你喜欢
  • 2012-10-18
  • 2013-10-03
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多