Как бороться с аутентификацией при входе в систему и сессиями - PullRequest
0 голосов
/ 26 января 2010

Использование codeigniter для разработки моего последнего проекта. С учетом сказанного, каков «лучший» способ справиться с сеансами входа в систему? Прямо сейчас я проверяю имя пользователя / пароль к БД. если это совпадение, я устанавливаю различные переменные сеанса, одной из которых является имя пользователя. На всем моем сайте я проверяю, вошел ли пользователь в систему. Я также читаю различные блоги, где люди фактически проверяют сессию по идентификатору сессии php.

Итак, я думаю, что мой вопрос в том, как сделать сайт безопасным? Очевидно, что я ничего не буду хранить в куки, сеанс будет храниться в какой-то таблице БД.

Ответы [ 3 ]

4 голосов
/ 26 января 2010

Вы определенно на правильном пути.

  • Аутентификация учетных данных в базе данных
  • Сохранить состояние аутентификации в данных сеанса
  • Проверьте, аутентифицирован ли пользователь при каждом доступе к странице, требующей аутентификации

Чтобы сделать процесс входа в систему безопасным:

  • Не храните пароли в БД в виде открытого текста, храните их хэши (sha1 () с солью хорошо работает)
  • Очистить все входные данные, поступающие от пользователя (включая данные формы входа в систему)
  • Не сохраняйте никакие данные, которые вы не хотите подделать, в файлах cookie

Лично я не использовал CodeIgniter, но я уверен, что в таких зрелых фреймворках классы, решающие проблему, встроены по умолчанию.

Вот краткое руководство по аутентификации в CI ссылка

0 голосов
/ 26 января 2010

CodeIgniter не использует нативные сессии PHP. Он генерирует свои собственные данные сеанса. Вам нужно загрузить библиотеку 'session', вызвав $this->load->library('session');.

Что я делаю, так это шифрую пароль при регистрации пользователя с помощью класса Encryption. Это делается путем вызова $this->load->library('encrypt');, а затем $this->encrypt->encode("user_password"). Вам нужно указать ключ шифрования, записав это в свой файл config.php: $ config ['encryption_key'] = "YOUR KEY" ;.

Затем для проверки учетных данных я получаю зашифрованный пароль из БД и вызываю $this->encrypt->decode("user_password") и проверяю, совпадает ли он с паролем, который написал пользователь.

После проверки учетных данных я сохраняю информацию, которую хочу сохранить от пользователя в сеансе CodeIgniter. Это делается путем установки массива с требуемыми параметрами и последующего вызова $this->session->set_userdata($newdata);.

Пример (скопировано с http://codeigniter.com/user_guide/libraries/sessions.html):

$newdata = array(
               'username'  => 'johndoe',
               'email'     => 'johndoe@some-site.com',
               'logged_in' => TRUE
           );

$this->session->set_userdata($newdata);

Затем, чтобы проверить, вошел ли пользователь в систему, нужно просто проверить в каждом методе, вошел ли пользователь в систему, вызвав что-то вроде этого: $this->session->userdata('logged_in');

Чтобы выйти из системы, просто уничтожьте сеанс: $this->session->sess_destroy();.

По моему опыту, есть несколько вещей, которые фреймворк делает для вас:

  1. Уничтожает сеанс через определенное время бездействия.
  2. CodeIgniter очищает входные данные от форм. Например, если вы попытаетесь ввести "(" или "'" или любые другие символы, которые могут сломать или создать нежелательные операторы SQL, CodeIgniter ускользнет от них.
  3. Это качается. Это очень гибкий и полный.
  4. Руководство пользователя - ваш друг. В основном оно содержит все, что вам нужно знать, и дает примеры того, как это сделать.
0 голосов
/ 26 января 2010

Независимо от того, что вы сохраняете в сеансе, он довольно безопасен, поскольку он сохраняется только на вашем хост-сервере (надеюсь, не на общем). если вы хотите использовать куки, пожалуйста, храните только токен, который ссылается на данные пользователя в базе данных. я также уверен, что у ci есть базовый модуль аутентификации, если не поздно - переключиться на kohana для хорошего модуля аутентификации и совершенства ORM.

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