例如,执行以下操作以登录用户的安全性如何:( 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)?
答案 0 :(得分:1)
PHP会话存储在服务器上,意味着没有客户端可以从外部读取/操作它(除非您允许它通过http请求或类似):所以你应该安全。
但是,如果要存储用户名,请不要忘记在通过SQL查询运行时将其转义。
保持身份证不会让它更安全但更方便:
答案 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。这可以在加载内容时比较令牌时保持临时表更精简。