2010-12-14 2 views
3

Я создал пользовательскую систему auth для CodeIgniter (я знаю, что существуют различные сторонние библиотеки, но это для меня лично), но я беспокоюсь, что мне не хватает чего-то очевидного, что может привести к в целом предмет down.CodeIgniter auth security model

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

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

ответ

3

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

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

+0

+1 для соления пароля –

+0

phpass делает соль, а затем хеширует с помощью bcrypt. Удержание захвата является хорошим моментом.Я знаю, что CI отслеживает пользовательский агент в сеансовой базе данных, но я не слишком уверен, что с ним происходит. Стоит проверить! – Toast

2

PS: Я не эксперт в области безопасности, поэтому я предпочитаю использовать систему, осматриваются безопасности-специалистов: OpenID, facebook подключиться, твиттер (OAuth), Google для входа в аккаунт, и т.д.

Но вот мой список (Я могу придумать):

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

Это хороший совет. Я просто хочу указать, что Codeigniter уже санирует входные данные, используя встроенный объект $ this-> input-> post, activerecord, чтобы минимизировать SQL-инъекцию и имеет встроенную фильтрацию XSS (я не уверен, что она включена по умолчанию). – rrrhys

+0

Вы правы в этом. Раньше я использовал codeigniter (когда я еще часто занимался разработкой php). Но я не верю, что у кодеригрина еще есть встроенная CSRF-защита? – Alfred

0

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