Как обезопасить сегмент, переданный контроллеру в CI - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь передать сегмент контроллеру.URL-адрес похож на base_url / controller / function / seg1.Я хочу убедиться, что если пользователь попытается ввести сегмент в адресной строке, контроллер будет следить за тем, чтобы не было других слов, кроме того, который я хочу передать.

Например, если пользователь пытается ввести base_url / main / function / (изменить это на другие слова) в адресной строке, контроллер отфильтрует сегмент.Я не уверен, как это сделать, и буду признателен, если кто-нибудь сможет мне помочь.

Ответы [ 2 ]

1 голос
/ 27 января 2012

Хорошо, поэтому лучший способ "обезопасить" себя от таких вещей - просто создать сеанс в то время, когда пользователь входит на ваш сайт с двумя значениями, сохраненными в этом сеансе;

1) Идентификатор первичного ключа их базы данных и 2) элемент сеанса с именем 'logged_in'

В то время, когда ваш пользователь будет заходить на ваш сайт, вы должны хранить эти два значения следующим образом:

$this->session->set_userdata('logged_in', true);
$this->session->set_userdata('user_id', $id);

Где $ id извлекается из записи пользователя во время аутентификации.

Теперь, когда они у вас есть, следующая часть будет заключаться в том, что в вашем контроллере вы поместите оператор if в эту проверку, если пользователь вошел в систему, как таковой;

function show($id) {
  if($this->session->userdata('logged_in')) {
    $posts = $this->Model_posts->get_user_posts($id);
  }
}

Теперь в вашей модели вы бы создали функцию для извлечения записи, которую вы хотите, чтобы пользователь мог просматривать, основываясь на его user_id. Мы скажем, например, сообщения пользователя.

function get_user_posts($user_id, $post_id) {
   $sql = "SELECT * FROM posts WHERE user_id = ? AND id = ?";
   $binds = array($user_id, $post_id);
   $qry = $this->db->query($sql, $binds);
   $result = array();

   while($row = $qry->result_array()) {
     array_push($result, $row);
   }
   return $result;
}

Теперь, когда вошедший в систему пользователь или посетитель пытается получить доступ к записям, которые ему не принадлежат, они не будут извлекать какие-либо записи, поскольку оператор select ограничивает то, что возвращается только этому пользователю.

1 голос
/ 27 января 2012

Структура у вас там есть

base_url/controller/action

Итак, ваш контроллер уже «фильтрует» его, потому что если у вас нет метода / функции в контроллере (методы = действия), тогда ваш контроллер вызовет ошибку 404 Page Not Found. Конечно, вы можете обработать свои ошибки, как считаете нужным, но из того, что вы представили, элемент, который вы хотите отфильтровать, называется действием контроллера.

Так, например;

http://www.base_url.com/users/add

обозначает, что вы хотите вызвать add (функцию) в пользовательском контроллере.

Если вы хотите передать действию add аргумент, вы должны сделать это как;

http://www.base_url.com/users/show/1

Где show будет действием контроллера, а 1 будет идентификатором пользователя, которого вы хотите показать. Я знаю, что кажется, что я даю базовое введение в методологии MVC, но, как я уже сказал, структура, которую вы показали, играет, как я описал.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...