Как выбрать библиотеку аутентификации для CodeIgniter?
Я вижу, есть несколько. Какие из них поддерживаются и просты в использовании? Каковы их плюсы и минусы?
11 ответов
Обновление (14 мая 2010 г.):
Оказывается, российский разработчик Илья Конюхов, прочитав это, взял перчатку и создал новую библиотеку аутентификации для CI на основе DX Auth, следуя рекомендациям и требованиям ниже.
И полученный Tank Auth выглядит как ответ на вопрос ОП. Я собираюсь выйти на конечность и назвать Tank Auth лучшей библиотекой аутентификации для CodeIgniter, доступной сегодня. Это непревзойденная библиотека, в которой есть все нужные вам функции и ни одна из тех вещей, которые вам не нужны:
Tank Auth
Pros
- Полнофункциональный
- Lean footprint (20 файлов) с учетом набора функций
- Очень хорошая документация
- Простой и элегантный дизайн базы данных (всего 4 таблицы БД)
- Большинство функций не являются обязательными и легко настраиваются
- Поддержка языковых файлов
- reCAPTCHA поддерживается
- Присоединяется к системе проверки CI
- Письма об активации
- Войти с помощью электронной почты, имени пользователя или обоих (настраивается)
- Срок действия неактивированных аккаунтов истекает
- Простая, но эффективная обработка ошибок
- Использует phpass для хеширования (а также хеширует коды автологинов в БД)
- Не использует вопросы безопасности
- Разделение данных пользователя и профиля очень приятно
- Очень разумная модель безопасности при неудачных попытках входа в систему (хорошая защита от ботов и DoS-атак)
(Незначительные) Минусы
- Утерянные пароли не хешируются в БД
- Включает встроенную (плохую) CAPTCHA, которая хороша для тех, кто не хочет зависеть от (принадлежащей Google) службы reCAPTCHA, но на самом деле она недостаточно безопасна
- Очень скудная онлайн-документация (здесь небольшая проблема, поскольку код хорошо документирован и интуитивно понятен)
Оригинальный ответ:
Я также реализовал свою собственную (в настоящее время около 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 выполнена правильно
Вот мой МИНИМАЛЬНЫЙ требуемый список функций из библиотеки аутентификации. Он также является подмножеством списка возможностей моей собственной библиотеки;)
- Крошечный след с дополнительной реализацией теста
- Полная документация
- Автозагрузка не требуется. Своевременная загрузка библиотек для производительности
- Поддержка языковых файлов; нет жестко закодированных строк
- reCAPTCHA поддерживается, но необязательно
- Рекомендуемое ИСТИННОЕ случайное получение соли (например, используя random.org или random.irb.hr)
- Дополнительные надстройки для поддержки входа в систему от третьих лиц (OpenID, Facebook Connect, Google Account и т. Д.)
- Войдите, используя имя пользователя или электронную почту
- Разделение данных пользователя и профиля
- Письма для активации и утерянных паролей
- Функция автоматического входа в cookie
- Конфигурируемый phpass для хэширования (конечно, соленый!)
- Хеширование паролей
- Хеширование кодов автологинов
- Хеширование утерянных паролей
- Присоединяется к системе проверки CI
- НЕТ вопросов безопасности!
- Принудительная политика надежных паролей на стороне сервера, с дополнительным валидатором на стороне клиента (Javascript)
- Максимальное количество неудачных попыток входа в систему с помощью контрмер BEST PRACTICES против словарных и DoS-атак!
- Весь доступ к базе данных осуществляется через подготовленные (связанные) заявления!
Примечание: эти последние несколько моментов не являются излишним сверх-высоким уровнем безопасности, который вам не нужен для вашего веб-приложения. Если библиотека аутентификации не соответствует этим стандартам безопасности на 100%, НЕ ИСПОЛЬЗУЙТЕ ЕГО!
Недавние громкие примеры безответственных кодеров, которые оставили их в своем программном обеспечении: #17 - как AOL электронная почта Сары Пэйлин была взломана во время президентской кампании; противное сочетание № 18 и № 19 стало причиной недавнего взлома аккаунтов Бритни Спирс, Барака Обамы, Fox News и других в Twitter; и №20 - это то, как китайским хакерам удалось украсть 9 миллионов единиц личной информации с более чем 70000 корейских веб-сайтов за один автоматический взлом в 2008 году.
Эти атаки не являются операцией на головном мозге. Если вы оставите свои задние двери широко открытыми, вы не должны вводить себя в заблуждение, вводя переднюю часть в заблуждение. Более того, если вы достаточно серьезно относитесь к кодированию, чтобы выбрать подходящую среду, такую как CodeIgniter, вы должны сделать это, по крайней мере, правильно, чтобы основные меры безопасности были выполнены правильно.
<Напыщенная>
По сути, вот как это выглядит: мне все равно, если библиотека аутентификации предлагает набор функций, расширенное управление ролями, совместимость с PHP4, красивые шрифты CAPTCHA, таблицы стран, полные админ-панели, навороты и свистки - если библиотека действительно делает мой сайт менее безопасен, не следуя передовым методам. Это пакет аутентификации; он должен сделать одну вещь правильно: аутентификация. Если он этого не делает, он на самом деле приносит больше вреда, чем пользы.
Декламация>
/ Дженс Роланд
Обратите внимание, что "полный список" Дженса Роланда не включает роли пользователей. Если вы заинтересованы в назначении различных пользовательских ролей (например, admin/user или admin/editor/user), эти библиотеки позволяют это:
- Ion_Auth (переписать Redux)
- Redux
- Backend Pro
Tank_Auth (№ 1 выше в списке Дженса) не имеет пользовательских ролей. Я понимаю, что это не совсем часть аутентификации, но так как
- проверка подлинности и управление ролями обрабатываются при загрузке страницы
- Оба связаны с безопасностью
- Одна и та же таблица / модель могут быть использованы для обоих.
- Оба могут быть установлены для загрузки в конструктор контроллера (или даже для автозагрузки)
Имеет много смысла иметь одну библиотеку для обработки обеих, если вам это нужно. Из-за этого я переключаюсь на Ion_Auth с Tank_Auth.
Ion_auth! Выглядит очень многообещающе и компактно! Мне нравится..
Я разработчик Redux Auth, и некоторые из упомянутых вами проблем были исправлены в бета-версии 2. Вы также можете загрузить это с официального сайта с помощью примера приложения.
- Требуется автозагрузка (снижение производительности)
- Использует небезопасную концепцию "вопросов безопасности". Dealbreaker!
Вопросы безопасности теперь не используются, и была введена более простая система забытых паролей.
- Типы возврата - это немного мешанина из кодов истины, ложи, ошибок и успеха
Это было исправлено в версии 2 и возвращает логические значения. Я ненавидел солянку так же сильно, как и ты.
- Не подключается к системе проверки CI
Пример приложения использует систему проверки CI.
- Не позволяет пользователю повторно отправить код "утерянного пароля"
Работа в процессе
Я также реализовал некоторые другие функции, такие как просмотр электронной почты, что дает вам возможность использовать помощников CodeIgniter в своих электронных письмах.
Это все еще в стадии разработки, поэтому, если у вас есть какие-либо предложения, пожалуйста, продолжайте их присылать.
-Попкорн
PS: Спасибо за рекомендацию Redux.
Я сталкивался с Flexi Auth ( http://haseydesign.com/flexi-auth/). Это выглядит очень многообещающе, и я начал его использовать. У этого есть замечательные особенности. Полностью интегрируется с CI и поставляется с двумя различными библиотечными файлами, в которых один очень загружен всеми функциями, а другой содержит только проверки.
Одним из лучших является то, что недавно зарегистрированный участник получает временный доступ на определенный период времени на сайте, пока они не нажмут на ссылку в своем электронном письме и не активируют.
Может быть, вы найдете Redux, отвечающий вашим потребностям. Это не излишество и поставляется исключительно с голыми функциями, которые потребуются большинству из нас. Разработчики и участники очень строго указали, какой код был добавлен.
Ion_Auth превосходит tank_auth в основном по двум причинам: пользовательские роли и документация, эти два отсутствуют в tank_auth.
Я использую настроенную версию DX Auth. Я нашел его простым в использовании, чрезвычайно простым в модификации, и у него есть руководство пользователя (с отличными примерами), которое очень похоже на Code Igniter.
Также взгляните на BackendPro
В конечном итоге вы, вероятно, в конечном итоге напишите что-то свое, но нет ничего плохого в том, чтобы заимствовать концепции из DX Auth, Freak Auth, BackendPro и т. Д.
Мой опыт работы с упакованными приложениями заключается в том, что они относятся к определенным структурам, и у меня возникли проблемы с интеграцией их в мои собственные приложения без необходимости взлома, а затем, если в предварительном пакете есть обновление, я должен их перенести.
Я также использую Smarty и ADOdb в своем коде CI, поэтому независимо от того, что я всегда буду делать серьезные изменения кода.
Я пытаюсь Ion_Auth и ценю это, кстати...
SimpleLoginSecure Делает аутентификацию простой и безопасной.
Tank Auth выглядит хорошо, но документация - это всего лишь одностраничное объяснение того, как установить, плюс быстрое завершение работы каждого PHP-файла. По крайней мере, это все, что я нашел после большого количества Google. Может быть, то, что люди имеют в виду выше, когда говорят, что Tank Auth хорошо документирован, это то, что код хорошо прокомментирован. Это хорошо, но отличается от документации. Было бы неплохо иметь некоторую документацию о том, как интегрировать функции Tank Auth с существующим кодом.