Як мені вибрати бібліотеку аутентифікації для CodeIgniter? [зачинено]


398

Я бачу, що їх небагато . Які з них підтримуються та прості у використанні? Які їх плюси і мінуси?


8
Якщо вас все ще цікавить, подивіться на Tank Auth. Я лише оновив свою публікацію нижче, переглянувши її, і вона чудова.
Єнс Роланд

7
Дякуємо за оновлення! Це буде корисною інформацією для відвідувачів цього питання в майбутньому, тому я змінив прийняту відповідь.
GavinR

3
Чому раптом близько? Здається, це дуже добре поєднується з шести настановами щодо суб'єктивних питань.
Брайан Ортіз

3
Визначається для повторного відкриття. Відповів на питання, яке у мене було (які системи аутентифікації в CI варто переглянути) чудово.
Круачан

3
Погоджено з @BrianOrtiz та Cruachan: Чому закрити? Хороше запитання та чудові відповіді.
Петро К.

Відповіді:


465

Оновлення (14 травня 2010 р.):

Виявляється, російський розробник Ілля Конюхов підхопив рукавицю після прочитання цього і створив нову авторську бібліотеку для CI на базі DX Auth, дотримуючись рекомендацій та вимог, поданих нижче.

І отриманий танк Auth виглядає як відповідь на питання ОП. Я збираюся вийти на кінцівку тут і зателефонувати Tank Auth найкращою бібліотекою аутентифікації для CodeIgniter, доступної сьогодні. Це непомітна бібліотека, яка має всі необхідні функції, і жоден з тих, хто вам не потрібен:

Танк авт

Плюси

  • Повнофункціональний
  • Худий слід (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 для солей (непогано для PRNG)
  • Заборона із збереженими рядками 'розум'
  • Просте, але ефективне управління помилками

Мінуси

  • Дозволяє лише користувачам "скинути" втрачений пароль (а не дозволяти їм вибрати новий після повторної активації)
  • Модель псевдоподії в домашніх умовах - хороший намір, але не вистачає позначки
  • Два поля паролів у користувацькій таблиці, поганий стиль
  • Використовує дві окремі таблиці користувачів (одна для 'temp' користувачів - неоднозначна і зайва)
  • Використовує потенційно небезпечний хеджування md5
  • Невдалі спроби входу зберігаються лише IP, а не ім'ям користувача - небезпечно!
  • Ключ автоматичного входу не хеширується в базі даних - практично так само небезпечно, як зберігання паролів у чіткому тексті!
  • Система ролей - це повний безлад: функція is_admin із жорстко кодованими іменами ролей, is_role - повний безлад, check_uri_permissions - безлад, вся таблиця дозволів - це погана ідея (URI може змінювати та робити сторінки незахищеними; дозволи повинні завжди зберігатися точно де чутлива логіка). Dealbreaker!
  • Включає рідну (бідну) CAPTCHA
  • Інтерфейс функції reCAPTCHA безладний

FreakAuth Light

Плюси

  • Дуже повнофункціональний
  • Переважно досить добре задокументований код
  • Розмежування даних користувача та профілю є приємним штрихом
  • Приєднується до системи перевірки CI
  • Електронні листи для активації
  • Підтримка мовних файлів
  • Активно розвинений

Мінуси

  • Відчуває себе трохи роздутим (50+ файлів)
  • І все ж йому бракує автоматичного входу файлів cookie (!)
  • Не підтримує вхід із іменем користувача та електронною поштою
  • Здається, є проблеми з символами UTF-8
  • Потрібно багато автозавантаження (перешкоджаючи продуктивності)
  • Конфігураційний файл, керований мікроконтролером
  • Жахливий поділ контролера View-Controller, з великою кількістю логіки програми у видах та виведенням жорсткого коду в контролери. Dealbreaker!
  • Поганий HTML-код у включених представленнях
  • Включає нестандартну CAPTCHA
  • Коментована налагодження перегукується скрізь
  • Формує певну структуру папок
  • Формує конкретну бібліотеку Ajax (її можна переключити, але не повинно бути там)
  • Немає максимального обмеження для спроб входу - ДУЖЕ небезпечно! Dealbreaker!
  • Викрадення формують перевірку
  • Використовує потенційно небезпечний хеджування md5

pc_user

Плюси

  • Гарний набір функцій для його крихітного сліду
  • Легкий, без набряку (3 файли)
  • Елегантний автоматичний вхід у файл cookie
  • Поставляється з додатковою реалізацією тесту (приємний дотик)

Мінуси

  • Використовує старий синтаксис бази даних CI (менш безпечний)
  • Не підключається до системи перевірки CI
  • Своєрідна неінтуїтивна система (роль) системи (індекси догори дном - непрактично)
  • Використовує потенційно небезпечне перемішування ша1

Свіжий Powered

Плюси

  • Маленький слід (6 файлів)

Мінуси

  • Не вистачає безлічі суттєвих особливостей. Dealbreaker!
  • Все важко закодовано. Dealbreaker!

Redux / Ion Auth

Згідно з вікі CodeIgniter , Redux було припинено, але вилка Ion Auth стає міцною: https://github.com/benedmunds/CodeIgniter-Ion-Auth

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

Плюси

  • Легкий і простий в інтеграції з CodeIgniter
  • Підтримує надсилання електронних листів безпосередньо з бібліотеки
  • Добре задокументоване в Інтернеті та хороша активна спільнота розробників / користувачів
  • Простий в реалізації проект

Мінуси

  • Більш складна схема БД, ніж деякі інші
  • У документації бракує деталей у деяких сферах

SimpleLoginSecure

Плюси

  • Крихітний слід (4 файли)
  • Мінімалістичний, абсолютно ніяких нальотів
  • Використовує phpass для хешування (відмінно)

Мінуси

  • Тільки увійдіть, вийдіть, створюйте та видаляйте
  • Не вистачає безлічі суттєвих особливостей. Dealbreaker!
  • Більше вихідної точки, ніж бібліотека

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

Тому: повернутися до основ.

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

Ось мій МІНІМАЛЬНИЙ необхідний список функцій бібліотеки аутентифікації. Це також є підмножиною списку моїх власних бібліотек;)

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

Примітка: останні кілька пунктів не є надмірними надмірними рівнями безпеки, які вам не потрібні для вашого веб-додатка. Якщо бібліотека аутентифікації не відповідає цим стандартам безпеки на 100%, НЕ ВИКОРИСТОВУЙТЕ!

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

Ці напади не є операцією на мозку. Якщо ви залишаєте задні двері широко відкритими, ви не повинні обманювати себе в помилковому почутті безпеки, зафіксувавши передні. Більше того, якщо ви досить серйозно ставитесь до кодування, щоб вибрати рамки найкращих практик, таких як CodeIgniter, ви зобов'язані самі принаймні виконати основні заходи безпеки.


<агент>

В основному, ось як це: Мені байдуже, чи авторська бібліотека пропонує купу функцій, розширене управління ролями, сумісність PHP4, гарні шрифти CAPTCHA, таблиці країн, повні панелі адміністратора, дзвіночки та свистки - якщо бібліотека насправді робить мій сайт менш захищений , не дотримуючись кращих практик. Це пакет аутентифікації ; для цього потрібно зробити ОДНУ: правильно. Якщо це не вдається зробити , що це насправді приносить більше шкоди , ніж користі.

</rant>

/ Єнс Роланд


1
Я до сих пір на ньому, побіг в неприємну проблему архітектури і довелося вибирати між хакерством разом швидким обхідним шляхом (який буде працювати нормально , але страждає від жорсткого зв'язку), або сидіти склавши руки і думати важко про те, як зробити це право . Я вибрав останній варіант, і досі його не зламав: D
Йенс Роланд

2
Jens, ви можете поглянути на Tank Auth, який, здається, був створений у відповідь на ваш (відмінний) пост: codeigniter.com/forums/viewthread/110993
Richard M

8
Чи можете ви оновити цю публікацію та порівняти з Ion-Auth (походить від dx-auth)? Здається, що ion-auth є більш сучасним та активним, ніж танк-auth в цей момент часу. Я хочу знати з точки зору безпеки, наскільки він хороший, як Tank-auth чи ні, тому що він має деякі додаткові функції, які можуть бути корисними.
Віджай

1
Усі ці бібліотеки використовують mysql .. однак я використовую MongoDb, що є noSql-базою даних. Чи існує бібліотека, яка працює з MoongoDB? Я спробував перетворити одну з вищезазначених бібліотек для вставки в MongoDB замість MySql, але вона стає занадто складною і хотіла б знати бібліотеку, яка вже робить це
Ninja

2
@Lykos: Зрозуміло, що дані користувача будуть аутентифікованими даними, такими як UserID, UserName, Email, PasswordHash, LastLoginTime тощо. Дані профілю повинні зберігатися в окремій таблиці БД і можуть бути будь-якими, залежно від конкретної програми. Це може включати такі речі, як день народження, стать, рідне місто, оцінка репутації тощо. Таким чином, розробники додатків можуть змінювати таблицю ProfileData будь-яким способом, який їм подобається, не турбуючись про те, що система аут раптом зламається.
Єнс Роланд

58

Зауважте, що "всебічний перелік" Єнса Роланда не включає ролі користувачів. Якщо вам цікаво призначити різні ролі користувачів (наприклад, адміністратор / користувач або адміністратор / редактор / користувач), ці бібліотеки дозволяють це:

  • Ion_Auth (переписати 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


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.


1
О, привіт Меттью, і дякую, що знайшов час, щоб відповісти на мій пост. Бета-версія звучить дуже цікаво - як я впевнений, ви помітили, Redux вже наблизився до того, щоб все було добре в моєму раунді, тому я зараз розглядаю його.
Єнс Роланд

Просто поглянув на низку форуму CI та дорожню карту. Якщо добре виглядати - стосовно "динамічних" солей, рекомендую об'єднати (рег. Дата). (хеш-ключ конфігураційного файлу). (код або пароль), щоб перешкодити радужним столам і грубій силі на викрадену базу даних
Jens Roland

Крім того, у мене є деякі думки щодо найкращих методів роботи з авторами ( 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
чи підтримує поточна версія останню версію коду Igniter? Здається, не було оновлень дуже давно. Інакше мені це подобається.
GavinR

Я використовую Redux з останньою версією CI на виробництві. Він дуже легкий, як і CI, і дуже настроюється.
GloryFish

1
Redux довше зберігається, дивіться це обговорення. codeigniter.com/forums/viewthread/145342
The Pixel Developer

Ion Auth заснований на Redux Auth 2, і саме той, який я б використовував. PyroCMS також використовує його. github.com/benedmunds/CodeIgniter-Ion-Auth
Роберт Ауді

8

Ion_Auth перемагає tank_auth переважно з двох причин, ролі користувачів та документації, ці два відсутні у tank_auth.



4

Також погляньте BackendPro

Зрештою, ви, мабуть, закінчите писати щось на замовлення, але немає нічого поганого в запозиченні понять у DX Auth, Freak Auth, BackendPro тощо.

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

Я також використовую Smarty та ADOdb у своєму CI-коді, так що незалежно від того, що я завжди міг би зробити основні зміни коду.


3

Tank Auth виглядає добре, але документація - це лише односторінкове пояснення, як встановити, а також швидкий знос кожного файлу PHP. Принаймні, це все, що я знайшов після багато гуглінгу. Можливо, те, що люди мають на увазі вище, коли вони кажуть, що Tank Auth добре задокументовано, це те, що код добре коментується. Це гарна річ, але відрізняється від документації. Було б непогано мати документацію про те, як інтегрувати функції Tank Auth із наявним кодом.


3

Я намагаюся Ion_Auth і ціную це, btw ...

SimpleLoginSecure Робить автентифікацію простою та безпечною.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.