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

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


person GavinR    schedule 06.12.2008    source источник
comment
Если вам все еще интересно, посмотрите Tank Auth. Я только что обновил свой пост после того, как просмотрел его, и он отличный.   -  person Jens Roland    schedule 14.05.2010


Ответы (11)


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

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

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

Танк Auth

Плюсы

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

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

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

Загрузите Tank Auth здесь


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

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

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

DX Auth

Плюсы

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

Минусы

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

FreakAuth Свет

Плюсы

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

Минусы

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

pc_user

Плюсы

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

Минусы

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

Fresh Powered

Плюсы

  • Компактность (6 файлов)

Минусы

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

Redux / Ion Auth

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

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

Плюсы

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

Минусы

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

SimpleLoginSecure

Плюсы

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

Минусы

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

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

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

Аутентификация для 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. Установлено максимальное количество неудачных попыток входа в систему с помощью ЛУЧШИХ ПРАКТИКОВ противодействия как атакам по словарю, так и DoS-атакам!
  20. Весь доступ к базе данных осуществляется через подготовленные (связанные) операторы!

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

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

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


‹Rant›

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

‹/Rant›

/ Йенс Роланд

person Jens Roland    schedule 24.01.2009
comment
Йенс, вы можете посмотреть на Tank Auth, который, кажется, был создан в ответ на ваше (отличное) сообщение: codeigniter.com/forums/viewthread/110993 - person Richard M; 03.08.2009
comment
Redux больше не поддерживается, и я цитирую его, он содержит ошибки, отсутствующие функции и дрянной код, поэтому я бы действительно рекомендовал избегать его использования. - codeigniter.com/forums/viewthread/145342 - person Ben; 21.07.2010
comment
Можете ли вы обновить этот пост и сравнить с Ion-Auth (производным от dx-auth) ? Похоже, что ion-auth на данный момент более актуален и активен, чем tank-auth. Я хочу знать с точки зрения безопасности, так ли он хорош, как Tank-auth или нет, потому что у него есть некоторые дополнительные функции, которые могут быть полезны. - person Vijay; 13.05.2011
comment
Все эти библиотеки используют mysql .. однако я использую MongoDb, которая является базой данных noSql. Есть ли библиотека, которая работает с MoongoDB? Я попытался преобразовать одну из приведенных выше библиотек для вставки в MongoDB вместо MySql, но она становится слишком сложной, и мне хотелось бы узнать библиотеку, которая уже делает это. - person Ninja; 19.10.2011
comment
Несмотря на то, что информация, содержащаяся в этом посте, устарела, она является лучшим итогом того, чего вы должны ожидать от вашего механизма аутентификации. Спасибо. - person ack__; 07.09.2012
comment
Не могли бы вы объяснить мне в №9, что именно вы имеете в виду на простом примере? - person ltdev; 22.05.2013
comment
@Lykos: Конечно - пользовательские данные будут специфичными для аутентификации данными, такими как UserID, UserName, Email, PasswordHash, LastLoginTime и т. Д. Данные профиля должны храниться в отдельной таблице БД и могут быть любыми, в зависимости от конкретного приложения. Сюда могут входить такие вещи, как день рождения, пол, родной город, оценка репутации и т. Д. Таким образом, разработчики приложений могут изменять таблицу ProfileData любым способом, не беспокоясь о внезапном выходе из строя системы аутентификации. - person Jens Roland; 25.05.2013
comment
Спасибо за ответ! Я пытаюсь создать простую настраиваемую библиотеку аутентификации (которая использует MY_Model для всей грязи) для некоторых проектов в моем колледже, и я ищу некоторые рекомендации / простые библиотеки аутентификации, чтобы получить некоторые идеи. Вы знаете какие-нибудь простые примеры или учебные пособия? - person ltdev; 26.05.2013
comment
@Lykos: В этом нет ничего простого - auth полон маленьких сюрпризов и подводных камней, и любой учебник, претендующий на «простоту», обязательно приведет вас к неприятностям. Я бы посоветовал прочитать исходный код как минимум четырех лучших библиотек аутентификации для выбранной вами платформы. - person Jens Roland; 27.05.2013
comment
Три года спустя я не уверен, что спасибо auth по-прежнему лучшее решение. Проект постепенно устарел, и другие ушли. (Ион Auth) - person bottleboot; 07.08.2013

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

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

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

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

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

person Burton Kent    schedule 09.07.2010
comment
Ion_Auth прекрасно работает с CI 2.1 и DataMapper ORM - person user482594; 01.05.2012

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

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

person Marko    schedule 10.03.2010
comment
Ion Auth у меня тоже отлично работает, есть все, что мне нужно, и ничего лишнего (например, секретные вопросы и тому подобное). - person SolidSmile; 30.06.2010
comment
Ion Auth выглядит лидером с точки зрения использования, возможностей и легкости. - person pbreitenbach; 07.07.2010
comment
Я пробовал как Tank Auth, так и Ion Auth, и могу сказать, что код Tank Auth намного чище, проще для понимания и легче расширять, чем Ion Auth. С другой стороны, Ion Auth поддерживает «роли». - person Jonathan; 11.10.2011

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

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

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

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

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

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

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

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

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

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

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

-Попкорн

Ps: Спасибо, что порекомендовали Redux.

person Community    schedule 28.01.2009
comment
Просто бегло просмотрел ветку форума CI и дорожную карту. Выглядит неплохо - что касается «динамических» солей, я рекомендую объединить (дата регистрации). (хеш-ключ конфигурационного файла). (код или пароль) для предотвращения радужных таблиц и перебора украденной базы данных - person Jens Roland; 29.01.2009
comment
Кроме того, у меня есть некоторые мысли о передовых методах аутентификации (stackoverflow.com/questions/549/) и дросселирование ботнета (stackoverflow.com/questions/479233/) вы можете захотеть переехать - person Jens Roland; 29.01.2009

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

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

person Suthan Bala    schedule 30.10.2013
comment
Спасибо за эту ссылку. У него также есть еще одна хорошая функция Flexi Cart haseydesign.com/flexi-cart. - person Vi_real; 09.05.2019

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

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

person Filip Dupanović    schedule 10.12.2008
comment
Redux дольше поддерживается, см. Это обсуждение. codeigniter.com/forums/viewthread/145342 - person The Pixel Developer; 13.02.2010
comment
Ion Auth основан на Redux Auth 2, и я бы использовал именно его. PyroCMS тоже использует это. github.com/benedmunds/CodeIgniter-Ion-Auth - person Robert Audi; 18.07.2010

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

person nedu    schedule 27.10.2010

Я использую настроенную версию DX Auth. Я нашел его простым в использовании, чрезвычайно легким в изменении, и в нем есть руководство пользователя (с отличными примерами) это очень похоже на Code Igniter.

person Jelani Harris    schedule 10.12.2008

Также ознакомьтесь с BackendPro

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

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

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

person Adam    schedule 13.12.2008

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

person user1284303    schedule 21.11.2010

Я пробую Ion_Auth и ценю это, кстати ...

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

person Fabiano Shark    schedule 26.02.2011