2010-01-25 3 views
0

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

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

ответ

0

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

Что я делаю, это зашифровать пароль, когда пользователь регистрируется с использованием класса шифрования. Это делается путем вызова $this->load->library('encrypt');, а затем $this->encrypt->encode("user_password"). Вам нужно указать ключ шифрования, записав его в файле config.php: $ config ['encryption_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'  => '[email protected]', 
       'logged_in' => TRUE 
      ); 

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

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

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

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

  1. Он уничтожает сессию после определенного времени бездействия.
  2. CodeIgniter очищает входные данные от форм. Например, если вы пытаетесь ввести «(» или "" или любые другие символы, которые могут сломаться или создавать нежелательные операторы SQL, CodeIgniter ускользает их от вас.
  3. Это качается. Это очень гибкое и полное.
  4. The user guide is your friend. Он содержит все, что вам нужно знать, и дает вам примеры того, как это сделать.
+0

Я видел это и использовал его с сессиями на основе файлов cookie. Однако заставить его писать в mysql не было возможным. С учетом сказанного я решил не испортить библиотеку сеансов, и я буду вводить mysql в свою среду. Я могу сохранить все остальное на mongodb, за исключением обработки сеанса. – luckytaxi

4

Вы, безусловно, находитесь на верном пути.

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

Чтобы сделать процесс Логина безопасным :

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

Я лично не использовал CodeIgniter, но я уверен, что у зрелой структуры вроде бы были классы, которые справляются с проблемой, встроенной по умолчанию.

Здесь пока краткое руководство для аутентификации в CI link

+0

Да, это то, что я планирую делать. Я думаю, что самая большая проблема, которая у меня есть, заключается в том, что я не использую mysql, Поэтому я задаю вопрос, как создать уникальный идентификатор сеанса и сохранить его в mongodb, а затем перекрестно ссылаться на него по всему сайту. Проверяет, установлено ли имя пользователя «безопасно» «Я достаточно сомневаюсь в этом. ld запускается в перехват сайтов или что-то еще, что он называется. – luckytaxi

+0

PHP использует файловую систему для хранения данных сеанса по умолчанию, вам не нужно * ничего хранить в любом месте. Читайте на сессиях PHP по адресу http://www.php.net/manual/en/book.session.php. Что касается атак сеансовой фиксации, если вы не используете параметры urls/get для переноса идентификатора сеанса со страницы на страницу, вы, по большей части, безопасны. –

+0

Если вы * хотите * сохранить идентификатор сеанса в своей базе данных, вы можете получить (или установить для этого) текущий идентификатор сеанса с помощью функции session_id() http://www.php.net/manual/en/ function.session-id.php. Кроме того, помните, что вы можете поддержать и принять ответы, если вы нашли их полезными. –

0

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

+0

выглядит как CI сохраняет cookie с session_id, зашифрованным в браузере пользователя. Я пытаюсь найти способ захватить созданный session_id и сохранить его в моей БД. Я не использую mysql, поэтому я не могу использовать готовый материал, который у них есть. – luckytaxi

Смежные вопросы