在PHP会话中使用登录数据有多安全?

时间:2016-01-08 14:37:23

标签: php codeigniter

例如,执行以下操作以登录用户的安全性如何:( set_userdata只设置$_SESSION变量。

$sess_array = array(
     'id' => $row->id,
     'username' => $row->username
   );
   $this->session->set_userdata('logged_in', $sess_array);

(来自http://www.iluv2code.com/login-with-codeigniter-php.html

要检查该数组是否在每个页面上都有有效的ID和用户名,以确保用户已登录?保持ID是否更安全(如果普通用户无法找到此ID)?

3 个答案:

答案 0 :(得分:1)

PHP会话存储在服务器上,意味着没有客户端可以从外部读取/操作它(除非您允许它通过http请求或类似):所以你应该安全

但是,如果要存储用户名,请不要忘记在通过SQL查询运行时将其转义。

保持身份证不会让它更安全但更方便:

  • 不需要逃跑(除了施法)
  • 在数据库中查找更容易/更快(将整数查找与字符串查找进行比较)
  • 与用户名相比,ID 唯一(明确)。

答案 1 :(得分:1)

如果没有服务器访问权限,就无法劫持PHP Session。但是,可以使用cookie进行Timing attack,用户可以访问该cookie。所以我建议加密你的cookie以使其更安全。

application/config/config.php

中设置此项
$config['sess_cookie_name']  = 'ci_session';
$config['sess_expiration']  = 9600;
$config['sess_encrypt_cookie'] = TRUE; 

答案 2 :(得分:1)

如果会话被嗅探并且检索到用户名,则存储用户名可能会使您的应用程序容易受到暴力攻击。

因此,您希望创建一个loggedIN令牌,然后将其存储在会话和数据库中,并在需要登录的内容被调用时进行比较。

标记应该是唯一的索引,并且定期销毁未登录的用户具有NULL。这可以在加载内容时比较令牌时保持临时表更精简。