Как избежать подделки межсайтовых запросов в CodeIgniter - PullRequest
0 голосов
/ 11 июня 2018

Я создаю веб-приложение, которое, когда администратор входит в систему, отображает 2 варианта,

  1. Выход из системы
  2. Проверка правильности токена.

Как только администратор входит в систему, его сеанс начинается, и в этом сеансе его идентификатор и токен сохраняются, этот токен действует в течение 17 часов и сохраняется в таблице базы данных user_auth вместе с его истечением expired_at (datetime) иid (целое число) '.Если администратор нажимает на 2-й вариант, токен, сохраненный в сеансе, сравнивается с токеном в базе данных и проверяется срок его действия.если токен совпадает и срок его действия истек, администратору будут показаны данные.Для этого

учетная запись (просмотр)

<a href=" <?php echo site_url('admin/logout') ?> ">logout</a>
<a href=" <?php echo site_url('admin/checkval') ?> ">check valididty of token</a>

admin (контроллер)

public function checkval(){

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

    $goal = $this->session->userdata('user_id');
    $uid = $goal[0];
    $token = $goal[1];
    $this->load->model('loginmodel');

    $check_id = $this->loginmodel->token_valid($uid, $token);
    if($check_id === TRUE){
      $data['query'] = $this->loginmodel->get_last_ten_entries();
       $this->load->view('admin/account', $data);
       print_r($data);
      echo "valid";
    }else {
        echo "invalid";
    }


}

Модель входа (модель)

public function token_valid($uid, $token)
 {
    $this->db->select('expired_at');
    $this->db->from('user_auth');
    $this->db->where('id',$uid);
    $this->db->where('token',$token);
    $query = $this->db->get();
    if ($query->num_rows() > 0)
    {
        $expired_date = $query->row()->expired_at;
        $expired_date = date_create($expired_date);
     $cdate = date_create('now');
     $interval = date_diff($expired_date,$cdate);
     $hour = $interval->h;
     if($hour <= 17)
     {
       return TRUE;
     }else
     {
       return FALSE;
     }
 }
}

, но проблема в том, что если администратор входит в систему на одной вкладке в браузере, а на другой вкладке или в окне я открываю checkval () контроллера, т.е. http://localhost/ci/index.php/admin/checkvalданные все еще видны.Я хочу, чтобы данные отображались только на той вкладке, в которой администратор вошел в систему, как только будет открыта другая вкладка, следует начать новый сеанс.

Как мне это сделать?

Спасибоза ваши предложения.

...