0

我已经为一家使用非现场贝宝购物篮销售服装和珠宝的公司创建了一个网站。它有一个非常基本的定制 cms,目前只允许网站所有者自己登录。登录后,他可以添加/删除/编辑产品,并在网站首页管理基本的新闻提要。

我现在想扩展站点以允许非管理员用户注册,并让他们能够做一些事情,比如在新闻提要上发表评论,也能够在论坛上发帖等,但不希望他们可以访问管理员可以执行的操作。

我最初的想法是使用以下内容:

public function validate_user()
{
    $username = trim($this->input->post('username'));
    $password = trim($this->input->post('password'));
    $password_md5 = md5($password);

    //query database searching for user
    $this->db->where('username', $username);
    $query = $this->db->get('users');

    //if user found in database, set session info
    if ($query->num_rows() == 1) {
        $result = $query->row();
        $output['username'] = TRUE;

        //check if password correct
        if ($result->password == $password_md5) {
            $output['password'] = TRUE;
            if ($result->admin) {
                $admin = TRUE;
            } else {
                $admin = FALSE;
            }

            //set session data for user including validated status
            $data = array(
                'id' => $result->id,
                'username' => $result->username,
                'fname' => $result->fname,
                'lname' => $result->lname,
                'admin' => $admin,
                'validated' => TRUE
            );
            $this->session->set_userdata($data);
        } else {
            $output['password'] = FALSE;
        }
    } else {
        $output['username'] = FALSE;
    }
    return $output;
}

我意识到,出于安全原因,在会话数据中存储布尔管理员状态值可能是一个坏主意,并且可能被利用。我将不胜感激有关我是否朝着正确的方向前进的一些建议,以及有关如何完成像我上面描述的那样的系统的任何建议。

提前致谢。

4

1 回答 1

1
  • 首先使用 codeigniter 表单验证 - 在发送到数据库之前确保您有正确的数据
  • 我认为值得将检查用户名分解为自己的方法。如果返回 true,则调用检查密码等。这也将使其在以后更加灵活。
  • 试着养成 XSS 清理表单输出的习惯,在字段名后面加上 TRUE

    $username = trim($this->input->post('username', TRUE));
    
  • 当您想要通过电子邮件重置密码等操作时,请查看 Ion Auth https://github.com/benedmunds/CodeIgniter-Ion-Auth
于 2012-11-23T21:45:50.147 回答