CodeIgniter Auth Модель безопасности - PullRequest
3 голосов
/ 14 декабря 2010

Я создал собственную систему аутентификации для CodeIgniter (я знаю, что доступны различные сторонние библиотеки, но это для моей же пользы), но я беспокоюсь, что упускаю что-то очевидное, что могло бы обрушить все это.

Я использую сеансы CI (через базу данных) и зашифровываю значения файлов cookie для немного бесполезной путаницы. Вход в систему происходит по протоколу SSL (и файлы cookie модифицируются только для обеспечения безопасности). Я также использую phpass для хеширования паролей для хранения, хотя это здесь не очень актуально. Где-то может быть слабая ссылка в этой части, но моя главная проблема в том, что проверки между страницами в основном состоят из подхода типа if is_logged_in = true вместе с именем пользователя в сеансе. Это немного касается меня, так как кажется слишком «легким». Этот подход достаточно уязвим? Должен ли я вычислять постраничный хэш, скажем, пользовательского агента или чего-то еще, и проверять их соответствие?

Любые указатели будут наиболее цениться. Как я уже сказал, я знаю о ранее существующих решениях, но я пытаюсь научить меня некоторому изучению здесь:)

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Все, что вы упомянули, хорошо. Однако я не знаком с phpass. Убедитесь, что при хешировании паролей вы используете соль.

Проверка if_logged_in = true достаточна, поскольку данные сеанса хранятся на стороне сервера. Причиной проверки таких вещей, как user-agent, является защита от перехвата сессии, когда один человек получает идентификатор сессии другого человека.

2 голосов
/ 15 декабря 2010

P.S .: Я не эксперт по безопасности, поэтому я предпочитаю использовать систему, проверенную экспертами по безопасности: openid, facebook connect, twitter (oauth), вход в Google и т. Д.

Но вот мой контрольный список (я могу подумать):

  • используйте SSL, чтобы никто не мог прочитать ваш пароль при отправке по сети.
  • Вы должны очистить все ваши данные ($ _ POST, $ _GET, $ _SERVER и т. Д.). Если это не локальная переменная, вы должны быть осторожны. Так, например, вы должны очистить $_SESSION['is_logged_in'], используя этот фильтр => $var = filter_var($_SESSION['is_logged_in'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); ОПЯТЬ Вы должны сделать это для всех входных данных, поступающих с сервера, потому что они небезопасны. Наилучшим подходом является использование белого списка вместо черного. Потому что есть шанс, что вы что-то упустите.
  • Используйте PDO , чтобы минимизировать риск инъекции sql.
  • Не храните ваши пароли в вашей базе данных в виде простого текста, но хеш их. Все еще рискованное дело, наверное. Потому что недавно gawker / lifehacker подвергся критике (интересно, как это могло произойти?). Я полагаю, ваш phpass довольно надежный, потому что owasp также рекомендует его.
  • Будьте внимательны при атаках XSS. Уже сделано из-за санации ввода
  • Принять меры против CSRF . Это также может быть очень опасно, если, например, вы можете изменить адрес электронной почты, когда пользователь вошел в систему. Следующим шагом будет отправка электронного письма для сброса пароля и вашей системы.
0 голосов
/ 05 июля 2011

Я не знаком с phpass, но проверил, использует ли он MD5, потому что если это так, то он недостаточно хорошИспользовать bycrypt http://www.memonic.com/user/pneff/id/1qHCT

...