Как выбрать библиотеку аутентификации для CodeIgniter? [закрыто]

398

Я вижу, есть несколько . Какие из них поддерживаются и просты в использовании? Каковы их плюсы и минусы?

GavinR
источник
8
Если вам все еще интересно, посмотрите на Tank Auth. Я только что обновил свой пост ниже после просмотра, и это отлично.
Дженс Роланд
7
Спасибо за обновления! Это будет ценная информация для посетителей этого вопроса в будущем, поэтому я изменил принятый ответ.
GavinR
3
Почему внезапное закрытие? Кажется, это очень хорошо согласуется с шестью субъективными вопросами.
Брайан Ортис
3
Номинирован на повторное открытие. Ответил на вопрос, который у меня был (какие системы аутентификации в CI стоит посмотреть) отлично.
Cruachan
3
Договорились с @BrianOrtiz и Cruachan: зачем закрывать? Хороший вопрос и отличные ответы.
Питер К.

Ответы:

465

Обновление (14 мая 2010 г.):

Оказывается, российский разработчик Илья Конюхов, прочитав это, взял вызов и создал новую библиотеку аутентификации для CI на основе DX Auth, следуя рекомендациям и требованиям ниже.

И полученный Tank Auth выглядит как ответ на вопрос ОП. Я собираюсь выйти на конечность и назвать Tank Auth лучшей библиотекой аутентификации для CodeIgniter, доступной сегодня. Это непревзойденная библиотека, в которой есть все необходимые функции, и ни одна из тех вещей, которые вам не нужны:

Tank Auth

Pros

  • Полнофункциональный
  • Lean footprint (20 файлов) с учетом набора функций
  • Очень хорошая документация
  • Простой и элегантный дизайн базы данных (всего 4 таблицы БД)
  • Большинство функций являются дополнительными и легко настраиваются
  • Поддержка языковых файлов
  • reCAPTCHA поддерживается
  • Присоединяется к системе проверки CI
  • Письма об активации
  • Войти с помощью электронной почты, имени пользователя или обоих (настраивается)
  • Срок действия неактивированных аккаунтов истекает
  • Простая, но эффективная обработка ошибок
  • Использует phpass для хеширования (а также хеширует коды автологинов в БД)
  • Не использует вопросы безопасности
  • Разделение данных пользователя и профиля очень приятно
  • Очень разумная модель безопасности при неудачных попытках входа в систему (хорошая защита от ботов и DoS-атак)

(Незначительные) Минусы

  • Утерянные пароли не хешируются в БД
  • Включает встроенную (плохую) CAPTCHA, которая хороша для тех, кто не хочет зависеть от (принадлежащей Google) службы reCAPTCHA, но на самом деле она недостаточно безопасна
  • Очень скудная онлайн-документация (небольшая проблема здесь, так как код хорошо документирован и интуитивно понятен)

Скачать Tank Auth можно здесь


Оригинальный ответ:

Я также реализовал свою собственную (в настоящее время около 80% сделано после нескольких недель работы). Я попробовал все остальные в первую очередь; FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered и некоторые другие. IMO, ни один из них не был на высоте, либо у них не было базовых функций, изначально небезопасных, либо слишком раздутых на мой вкус.

На самом деле, я сделал подробный обзор всех библиотек аутентификации для CodeIgniter, когда тестировал их (сразу после Нового года). FWIW, я поделюсь им с вами:

DX Auth

Pros

  • Очень полнофункциональный
  • Средний размер (более 25 файлов), но он чувствует себя довольно стройным
  • Отличная документация, хотя некоторые на немного ломаном английском
  • Поддержка языковых файлов
  • reCAPTCHA поддерживается
  • Присоединяется к системе проверки CI
  • Письма об активации
  • Срок действия неактивированных аккаунтов истекает
  • Предлагает grc.com для солей (неплохо для PRNG)
  • Запрет с сохраненными строками 'разум'
  • Простая, но эффективная обработка ошибок

Cons

  • Только позволяет пользователям «сбрасывать» утерянный пароль (вместо того, чтобы позволить им выбрать новый после повторной активации)
  • Доморощенная модель псевдо-события - хорошее намерение, но не соответствует цели
  • Два поля пароля в пользовательской таблице, плохой стиль
  • Используются две отдельные пользовательские таблицы (одна для временных пользователей - неоднозначная и избыточная)
  • Использует потенциально небезопасное хеширование MD5
  • Неудачные попытки входа в систему сохраняются только по IP, а не по имени пользователя - небезопасно!
  • Ключ Autologin не хэшируется в базе данных - практически так же небезопасно, как хранение паролей в открытом тексте!
  • Ролевая система представляет собой полный беспорядок: функция is_admin с жестко запрограммированными именами ролей, is_role полный беспорядок, check_uri_permissions - беспорядок, вся таблица разрешений - плохая идея (URI может измениться и сделать страницы незащищенными; разрешения всегда должны храниться точно где чувствительная логика). Dealbreaker!
  • Включает в себя родную (бедную) капчу
  • Интерфейс функции reCAPTCHA беспорядочный

FreakAuth Light

Pros

  • Очень полнофункциональный
  • В основном довольно хорошо документированный код
  • Разделение данных пользователя и профиля - приятное прикосновение
  • Присоединяется к системе проверки CI
  • Письма об активации
  • Поддержка языковых файлов
  • Активно развивается

Cons

  • Чувствует себя немного раздутым (более 50 файлов)
  • И все же ему не хватает автоматического входа в систему cookie (!)
  • Не поддерживает логины с именем пользователя и электронной почтой
  • Кажется, есть проблемы с символами UTF-8
  • Требует много автозагрузки (снижение производительности)
  • Плохо управляемый файл конфигурации
  • Страшное разделение View-Controller, с большим количеством программной логики в представлениях и выводом, жестко запрограммированным в контроллеры. Dealbreaker!
  • Плохой HTML-код во включенных представлениях
  • Включает некачественную капчу
  • Комментируемые отладочные отголоски везде
  • Форсирует определенную структуру папок
  • Формирует определенную библиотеку Ajax (может быть переключена, но не должна быть там в первую очередь)
  • Максимальное ограничение на попытки входа в систему - ОЧЕНЬ небезопасно! Dealbreaker!
  • Проверка формы угонщиков
  • Использует потенциально небезопасное хеширование MD5

pc_user

Pros

  • Хороший набор функций для его крошечного следа
  • Легкий, без раздувания (3 файла)
  • Элегантный автоматический cookie-вход
  • Поставляется с дополнительной тестовой реализацией (приятное прикосновение)

Cons

  • Использует старый синтаксис базы данных CI (менее безопасный)
  • Не подключается к системе проверки CI
  • Вроде неинтуитивный статус (роль) системы (индексы вверх ногами - нецелесообразно)
  • Использует потенциально небезопасное хэширование sha1

Свежий Приведенный в действие

Pros

  • Небольшая площадь (6 файлов)

Cons

  • Не хватает многих существенных функций. Dealbreaker!
  • Все жестко закодировано. Dealbreaker!

Redux / Ion Auth

Согласно вики CodeIgniter , Redux больше не выпускается, но форк Ion Auth набирает силу: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth - отличная библиотека, не слишком тяжелая и не слишком продвинутая. В большинстве случаев его набор функций будет более чем соответствовать требованиям проекта.

Pros

  • Легкий и простой в интеграции с CodeIgniter
  • Поддерживает отправку писем прямо из библиотеки
  • Хорошо документированный онлайн и хорошее активное сообщество разработчиков и пользователей
  • Просто внедрить в проект

Cons

  • Более сложная схема БД, чем у некоторых других
  • Документация не хватает деталей в некоторых областях

SimpleLoginSecure

Pros

  • Крошечный след (4 файла)
  • Минималистичный, абсолютно без раздувания
  • Использует phpass для хеширования (отлично)

Cons

  • Только войти, выйти, создать и удалить
  • Не хватает многих существенных функций. Dealbreaker!
  • Больше отправной точки, чем библиотеки

Не поймите меня неправильно: я не имею в виду неуважение к любой из вышеперечисленных библиотек; Я очень впечатлен тем, чего достигли их разработчики, и как далеко продвинулся каждый из них, и я не стесняюсь повторно использовать часть их кода для создания своего собственного. Я имею в виду, что иногда в этих проектах акцент смещается с основных «нужных» (таких как жесткие меры безопасности) на более мягкие «приятные», и я надеюсь, что это исправит ,

Поэтому вернемся к основам.

Аутентификация для CodeIgniter выполнена правильно

Вот мой МИНИМАЛЬНЫЙ требуемый список функций из библиотеки аутентификации. Он также является подмножеством списка возможностей моей собственной библиотеки;)

  1. Крошечный след с дополнительной реализацией теста
  2. Полная документация
  3. Автозагрузка не требуется. Своевременная загрузка библиотек для производительности
  4. Поддержка языковых файлов; нет жестко закодированных строк
  5. reCAPTCHA поддерживается, но необязательно
  6. Рекомендуемое ИСТИННОЕ случайное образование соли (например, используя random.org или random.irb.hr)
  7. Дополнительные надстройки для поддержки входа в систему от третьих лиц (OpenID, Facebook Connect, Google Account и т. Д.)
  8. Войти используя имя пользователя или электронную почту
  9. Разделение данных пользователя и профиля
  10. Письма для активации и утерянных паролей
  11. Функция автоматического входа в cookie
  12. Конфигурируемый phpass для хеширования (конечно, соленый!)
  13. Хеширование паролей
  14. Хеширование кодов автологинов
  15. Хеширование утерянных паролей
  16. Присоединяется к системе проверки CI
  17. НЕТ вопросов безопасности!
  18. Принудительная политика надежных паролей на стороне сервера с дополнительным средством проверки на стороне клиента (Javascript)
  19. Максимальное количество неудачных попыток входа в систему с помощью контрмер BEST PRACTICES против словарных и DoS-атак!
  20. Весь доступ к базе данных осуществляется через подготовленные (связанные) заявления!

Примечание: эти последние несколько пунктов не излишним сверх-высоким уровнем безопасности, который вам не нужен для вашего веб-приложения. Если библиотека аутентификации не соответствует этим стандартам безопасности на 100%, НЕ ИСПОЛЬЗУЙТЕ ЕГО!

Недавние громкие примеры безответственных кодеров, которые оставили их в своем программном обеспечении: # 17 - как AOL электронная почта Сары Пэйлин была взломана во время президентской кампании; противная комбинация № 18 и № 19 стала причиной недавнего взлома аккаунтов Бритни Спирс, Барака Обамы, Fox News и других в Twitter; и №20 - это то, как китайским хакерам удалось украсть 9 миллионов единиц личной информации с более чем 70 000 корейских веб-сайтов за один автоматический взлом в 2008 году.

Эти атаки не являются операцией на головном мозге. Если вы оставите свои задние двери широко открытыми, вы не должны вводить себя в заблуждение, вводя в действие переднюю часть. Более того, если вы достаточно серьезно относитесь к кодированию, чтобы выбрать подходящую среду, такую ​​как CodeIgniter, вы должны сделать это, по крайней мере, правильно, выполнив самые основные меры безопасности.


<Напыщенная>

По сути, вот как это выглядит: мне все равно, если библиотека аутентификации предлагает набор функций, расширенное управление ролями, совместимость с PHP4, красивые шрифты CAPTCHA, таблицы стран, полные админ-панели, навороты и свистки - если библиотека действительно делает мой сайт менее безопасен , не следуя передовым методам. Это пакет аутентификации ; он должен сделать одну вещь правильно: аутентификация. Если это не удается сделать , что это на самом деле приносит больше вреда , чем пользы.

</ Декламация>

/ Дженс Роланд

Дженс Роланд
источник
1
Я все еще нахожусь на этом, столкнулся с неприятной архитектурной проблемой и должен был выбрать между быстрым обходом пути (который будет работать просто отлично, но страдал бы от сильной связи), или сидеть сложа руки и думать о том, как сделать это правильно . Я выбрал последний вариант и до сих пор не взломал его: D
Дженс Роланд
2
Дженс, возможно, вы захотите взглянуть на Tank Auth, который, кажется, был создан в ответ на ваше (превосходное) сообщение: codeigniter.com/forums/viewthread/110993
Ричард М
8
Можете ли вы обновить этот пост и сравнить с Ion-Auth (производным от dx-auth)? Кажется, что ion-auth более актуален и активен, чем tank-auth на данный момент. Я хочу знать с точки зрения безопасности, хорош ли он как Tank-auth или нет, потому что он имеет некоторые дополнительные функции, которые могут быть полезны.
Виджей
1
Все эти библиотеки используют mysql .. однако я использую MongoDb, который является базой данных noSql. Есть ли библиотека, которая работает с MoongoDB? Я попытался преобразовать одну из приведенных выше библиотек для вставки в MongoDB вместо MySql, но она становится слишком сложной и хотела бы узнать библиотеку, которая уже делает это
Ninja
2
@Lykos: Конечно. Пользовательские данные - это данные, относящиеся к аутентификации, такие как UserID, UserName, Email, PasswordHash, LastLoginTime и т. Д. Данные профиля должны храниться в отдельной таблице БД и могут быть любыми, в зависимости от конкретного приложения. Это может включать такие вещи, как день рождения, пол, родной город, оценка репутации и т. Д. Таким образом, разработчики приложений могут изменять таблицу ProfileData любым удобным для них способом, не беспокоясь о внезапном сбое системы аутентификации.
Дженс Роланд
58

Обратите внимание, что «полный список» Дженса Роланда не включает роли пользователей. Если вы заинтересованы в назначении различных пользовательских ролей (например, admin / user или admin / editor / user), эти библиотеки позволяют это:

  • Ion_Auth (переписать Redux)
  • Redux
  • Backend Pro

Tank_Auth (№ ​​1 выше в списке Дженса) не имеет пользовательских ролей. Я понимаю, что это не совсем часть аутентификации, но так как

  • проверка подлинности и управление ролями обрабатываются при загрузке страницы
  • Оба связаны с безопасностью
  • Одну и ту же таблицу / модель можно использовать для обоих.
  • Оба могут быть установлены для загрузки в конструктор контроллера (или даже для автозагрузки)

Имеет много смысла иметь одну библиотеку для обработки обеих, если вам это нужно. Из-за этого я переключаюсь на Ion_Auth с Tank_Auth.

Бертон Кент
источник
Ах, понимаете, это действительно полезно знать - приятно иметь все аспекты в одной библиотеке, сохраняя все это простым и функциональным. Придется заглянуть в Ion_Auth именно по этой причине! Спасибо Бертон!
Эдд Твилбек
4
Конечно, это хороший момент, и управление ролями (авторизация в целом) является центральной частью многих сайтов, тесно связанных с системой аутентификации. Тем не менее, я выберу безопасную систему аутентификации с упрощенным или несуществующим управлением ролями над уязвимой системой аутентификации с расширенным встроенным управлением ролями в любой день.
Дженс Роланд
Ion_Auth прекрасно работает с CI 2.1 и DataMapper ORM
user482594
37

Ion_auth! Выглядит очень многообещающе и компактно! Мне нравиться..

http://github.com/benedmunds/CodeIgniter-Ion-Auth

Marko
источник
Ion Auth прекрасно работает для меня, есть все, что мне нужно, и ничего, что я не делаю (например, секретные вопросы и тому подобное).
SolidSmile
1
Ion Auth выглядит как нынешний лидер с точки зрения использования, функций и легкости.
pbreitenbach
5
Я пробовал как Tank Auth, так и Ion Auth, и я могу сказать, что код Tank Auth намного чище, проще для понимания и расширения, чем Ion Auth. С другой стороны, Ion Auth поддерживает «роли».
Джонатан
30

Я разработчик Redux Auth, и некоторые из упомянутых вами проблем были исправлены в бета-версии 2. Вы также можете загрузить это с официального сайта с помощью образца приложения.

  • Требуется автозагрузка (снижение производительности)
  • Использует небезопасную концепцию «вопросов безопасности». Dealbreaker!

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

  • Типы возврата - это немного мешанина из кодов истины, ложи, ошибок и успеха

Это было исправлено в версии 2 и возвращает логические значения. Я ненавидел сборную столько, сколько ты.

  • Не подключается к системе проверки CI

В примере приложения используется система проверки CI.

  • Не позволяет пользователю повторно отправить код «утерянного пароля»

Работа в процессе

Я также реализовал некоторые другие функции, такие как просмотр электронной почты, что дает вам возможность использовать помощников CodeIgniter в своих письмах.

Это все еще в стадии разработки, поэтому, если у вас есть какие-либо предложения, пожалуйста, продолжайте их присылать.

-Попкорн

Ps: Спасибо за рекомендацию Redux.

Svish
источник
1
О, привет, Мэтью - и спасибо, что нашли время ответить на мой пост. Бета звучит очень интересно - как я уверен, что вы заметили, Redux уже подошел ближе всего к тому, чтобы получить все правильно в моем обзоре, так что я буду смотреть на это прямо сейчас.
Дженс Роланд
Просто взглянул на ветку форума CI и план действий. Выглядит хорошо - в отношении «динамических» солей я рекомендую объединить (рег. Дата). (ключ хеш-файла конфигурации). (код или пароль), чтобы помешать радужным таблицам и грубой силе украденной базы данных
Дженс Роланд
Кроме того, у меня есть некоторые мысли о лучших методах аутентификации ( stackoverflow.com/questions/549/… ) и дросселировании ботнета ( stackoverflow.com/questions/479233/… ), которые вы, возможно, захотите запустить
Jens Roland
14

Я сталкивался с Flexi Auth ( http://haseydesign.com/flexi-auth/ ). Это выглядит очень многообещающе, и я начал его использовать. У этого есть замечательные особенности. Полностью интегрируется с CI и поставляется с двумя различными библиотечными файлами, в которых один очень загружен всеми функциями, а другой содержит только проверки.

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

Сутан Бала
источник
Спасибо за эту ссылку. Он также имеет еще одну полезную функцию Flexi Cart haseydesign.com/flexi-cart .
Вир
13

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

Это официальная страница

Филипп Дупанович
источник
1
текущая версия поддерживает последнюю версию Code Igniter? Похоже, что не было обновления очень долго. В противном случае мне это нравится.
GavinR
Я использую Redux с последней версией CI на производственном сайте. Это очень легкий, как CI и очень настраиваемый.
GloryFish
1
Redux поддерживается дольше, смотрите это обсуждение. codeigniter.com/forums/viewthread/145342
Pixel Developer,
Ion Auth основан на Redux Auth 2, и я бы использовал его. PyroCMS тоже его использует. github.com/benedmunds/CodeIgniter-Ion-Auth
Роберт Ауди
8

Ion_Auth превосходит tank_auth в основном по двум причинам: пользовательские роли и документация, эти два отсутствуют в tank_auth.

nedu
источник
4

Также взгляните на BackendPro

В конечном итоге вы, вероятно, в конечном итоге напишите что-то свое, но нет ничего плохого в том, чтобы заимствовать концепции из DX Auth, Freak Auth, BackendPro и т. Д.

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

Я также использую Smarty и ADOdb в своем коде CI, поэтому независимо от того, что я всегда буду делать серьезные изменения кода.

Адам
источник
3

Tank Auth выглядит хорошо, но документация - это всего лишь одностраничное объяснение того, как установить, плюс быстрое завершение работы каждого PHP-файла. По крайней мере, это все, что я нашел после большого количества Google. Может быть, то, что люди имеют в виду выше, когда говорят, что Tank Auth хорошо документированы, это то, что код хорошо прокомментирован. Это хорошо, но отличается от документации. Было бы неплохо иметь некоторую документацию о том, как интегрировать функции Tank Auth с существующим кодом.

user1284303
источник
3

Я пытаюсь Ion_Auth и ценю это, кстати ...

SimpleLoginSecure Делает аутентификацию простой и безопасной.

Акула Фабиано
источник