Я вижу, что есть несколько. Какие из них обслуживаются и просты в использовании? Каковы их плюсы и минусы?
Как выбрать библиотеку аутентификации для CodeIgniter?
Ответы (11)
Обновление (14 мая 2010 г.):
Оказывается, российский разработчик Илья Конюхов принял вызов после прочтения этого и создал новую библиотеку аутентификации для CI на основе DX Auth, следуя приведенным ниже рекомендациям и требованиям.
И полученный Tank Auth выглядит как ответ на вопрос OP. Я собираюсь рискнуть и назвать Tank Auth лучшей библиотекой аутентификации для CodeIgniter, доступной сегодня. Это надежная библиотека, в которой есть все функции, которые вам нужны, и ничего лишнего:
Танк Auth
Плюсы
- Полнофункциональный
- Экономия места (20 файлов) с учетом набора функций
- Очень хорошая документация
- Простой и элегантный дизайн базы данных (всего 4 таблицы БД)
- Большинство функций являются необязательными и легко настраиваются
- Поддержка языковых файлов
- reCAPTCHA поддерживается
- Подключения к системе валидации CI
- Электронные письма для активации
- Войти с помощью электронной почты, имени пользователя или обоих (настраивается)
- Срок действия неактивированных учетных записей истекает автоматически
- Простая, но эффективная обработка ошибок
- Использует phpass для хеширования (а также хеширует коды автологина в БД)
- Не использует контрольные вопросы
- Разделение данных пользователя и профиля очень приятно
- Очень разумная модель безопасности при неудачных попытках входа в систему (хорошая защита от ботов и DoS-атак)
(Незначительные) Минусы
- Коды утерянных паролей не хешируются в БД
- Включает встроенную (плохую) CAPTCHA, которая хороша для тех, кто не хочет зависеть от (принадлежащей Google) службы reCAPTCHA, но на самом деле она недостаточно безопасна
- Очень скудная онлайн-документация (здесь небольшая проблема, поскольку код хорошо документирован и интуитивно понятен)
Оригинальный ответ:
Я также реализовал свой собственный (на данный момент около 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 выполнена правильно
Вот мой МИНИМАЛЬНЫЙ необходимый список функций из библиотеки аутентификации. Это также часть списка функций моей собственной библиотеки;)
- Крошечный след с дополнительной реализацией теста
- Полная документация
- Автозагрузка не требуется. Своевременная загрузка библиотек для повышения производительности
- Поддержка языковых файлов; нет жестко запрограммированных строк
- reCAPTCHA поддерживается, но необязательно
- Рекомендуемая ИСТИНА генерация случайной соли (например, с использованием random.org или random.irb.hr)
- Дополнительные надстройки для поддержки стороннего входа в систему (OpenID, Facebook Connect, Google Account и т. Д.)
- Войдите, используя имя пользователя или адрес электронной почты
- Разделение данных пользователя и профиля
- Электронные письма для активации и утерянных паролей
- Функция автоматического входа в систему cookie
- Настраиваемый phpass для хеширования (правильно посолить конечно!)
- Хеширование паролей
- Хеширование кодов автологина
- Хеширование кодов утерянных паролей
- Подключения к системе валидации CI
- НЕТ вопросов безопасности!
- Принудительная политика надежных паролей на стороне сервера с дополнительным валидатором на стороне клиента (Javascript)
- Установлено максимальное количество неудачных попыток входа в систему с помощью ЛУЧШИХ ПРАКТИКОВ противодействия как атакам по словарю, так и DoS-атакам!
- Весь доступ к базе данных осуществляется через подготовленные (связанные) операторы!
Примечание: последние несколько пунктов не излишка сверхвысокой безопасности, которая вам не нужна для вашего веб-приложения. Если библиотека аутентификации не соответствует этим стандартам безопасности на 100%, НЕ ИСПОЛЬЗУЙТЕ ЕЕ!
Недавние громкие примеры безответственных программистов, которые оставили их вне своего программного обеспечения: № 17 - это то, как электронная почта Сары Пэйлин AOL была взломана во время президентской кампании; неприятная комбинация № 18 и № 19 была виновником недавнего взлома аккаунтов в Твиттере Бритни Спирс, Барака Обамы, Fox News и других; и только # 20 - это то, как китайским хакерам удалось украсть 9 миллионов единиц личной информации с более чем 70 000 корейских веб-сайтов в одном автоматическом взломе в 2008 году.
Эти атаки не являются операцией на головном мозге. Если вы оставите задние двери настежь открытыми, вы не должны вводить себя в заблуждение ложным чувством безопасности, запирая переднюю дверь. Более того, если вы достаточно серьезно относитесь к кодированию, чтобы выбрать фреймворк передового опыта, такой как CodeIgniter, вы должны сделать это ради себя, по крайней мере, правильно выполнить самые базовые меры безопасности.
‹Rant›
В принципе, вот как это: Мне все равно, предлагает ли библиотека аутентификации набор функций, расширенное управление ролями, совместимость с PHP4, красивые шрифты CAPTCHA, таблицы стран, полные административные панели, навороты - если библиотека действительно делает мой сайт менее безопасным, не следуя рекомендациям. Это пакет аутентификации; он должен делать ОДНО правильно: аутентификацию. Если ему не удается этого, на самом деле он приносит больше вреда, чем пользы.
‹/Rant›
/ Йенс Роланд
Обратите внимание, что «исчерпывающий список» Йенса Роланда не включает роли пользователей. Если вы заинтересованы в назначении разных ролей пользователей (например, admin / user или admin / editor / user), эти библиотеки позволяют:
- Ion_Auth (перезапись Redux)
- Redux
- Backend Pro
Tank_Auth (№1 выше в списке Йенса) не имеет пользовательских ролей. Я понимаю, что это не совсем часть аутентификации, но поскольку
- аутентификация и управление ролями обрабатываются при загрузке страницы
- Оба связаны с безопасностью
- Для обоих можно использовать одну и ту же таблицу / модель.
- Оба могут быть настроены для загрузки в конструктор контроллера (или даже для автозагрузки).
Имеет смысл иметь одну библиотеку для обработки обеих, если вам это нужно. Перехожу на Ion_Auth с Tank_Auth из-за этого.
Ion_auth! Выглядит очень многообещающе и занимает мало места! Мне нравится..
http://github.com/benedmunds/CodeIgniter-Ion-Auth
Я разработчик Redux Auth, и некоторые из упомянутых вами проблем были исправлены в бета версии 2. Вы также можете скачать его с официального сайта вместе с образцом приложения.
- Требуется автозагрузка (снижает производительность)
- Использует небезопасную по своей сути концепцию «секретных вопросов». Преступник!
Вопросы безопасности теперь не используются, и была введена более простая система забытых паролей.
- Типы возврата представляют собой смесь истинных, ложных, кодов ошибки и успеха.
Это было исправлено в версии 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, поэтому независимо от того, что я всегда буду в конечном итоге вносить серьезные изменения в код.
Tank Auth выглядит неплохо, но документация - это всего лишь одностраничное объяснение того, как установить, плюс быстрый просмотр каждого файла PHP. По крайней мере, это все, что я нашел после долгого поиска в Google. Возможно, что люди имеют в виду выше, когда говорят, что Tank Auth хорошо документирован, так это то, что код хорошо прокомментирован. Это хорошо, но отличается от документации. Было бы неплохо иметь некоторую документацию о том, как интегрировать функции Tank Auth с вашим существующим кодом.
Я пробую Ion_Auth и ценю это, кстати ...
SimpleLoginSecure Делает аутентификацию простой и безопасной.