Jak wybrać bibliotekę uwierzytelniania dla CodeIgniter? [Zamknięte]

398

Widzę, że jest ich kilka . Które są utrzymywane i łatwe w użyciu? Jakie są ich zalety i wady?

GavinR
źródło
8
Jeśli nadal jesteś zainteresowany, spójrz na Tank Auth. Właśnie zaktualizowałem swój post poniżej po jego przejrzeniu i jest doskonały.
Jens Roland
7
Dziękuję za aktualizację! W przyszłości będą to cenne informacje dla odwiedzających to pytanie, dlatego zmieniłem przyjętą odpowiedź.
GavinR
3
Skąd to nagłe zamknięcie? Wydaje się bardzo dobrze pasować do sześciu wytycznych dotyczących subiektywnych pytań.
Brian Ortiz
3
Nominowany do ponownego otwarcia. Idealnie odpowiedziałem na pytanie, które miałem (na jakie systemy uwierzytelniania w CI warto spojrzeć).
Cruachan
3
Uzgodnione z @BrianOrtiz i Cruachan: Dlaczego zamknąć? Dobre pytanie i świetne odpowiedzi.
Peter K.

Odpowiedzi:

465

Aktualizacja (14 maja 2010 r.):

Okazuje się, że rosyjski programista Ilya Konyukhov po przeczytaniu tego podniósł rękawicę i stworzył nową bibliotekę auth dla CI opartą na DX Auth, zgodnie z poniższymi zaleceniami i wymaganiami.

Powstały Auth Tank wygląda jak odpowiedź na pytanie PO. Mam zamiar wyjść tutaj na całość i nazwać Tank Auth najlepszą dostępną dzisiaj biblioteką uwierzytelniania CodeIgniter. To solidna biblioteka, która ma wszystkie funkcje, których potrzebujesz, i nie ma nadęty:

Tank Auth

Plusy

  • Pełna funkcjonalność
  • Lean footprint (20 plików), biorąc pod uwagę zestaw funkcji
  • Bardzo dobra dokumentacja
  • Prosty i elegancki projekt bazy danych (tylko 4 tabele DB)
  • Większość funkcji jest opcjonalna i łatwa do skonfigurowania
  • Obsługa plików językowych
  • Obsługa reCAPTCHA
  • Podłącza się do systemu sprawdzania poprawności CI
  • E-maile aktywacyjne
  • Zaloguj się przy użyciu adresu e-mail, nazwy użytkownika lub obu (konfigurowalne)
  • Nieaktywowane konta wygasają automatycznie
  • Prosta, ale skuteczna obsługa błędów
  • Używa phpass do mieszania (a także szyfruje kody autologin w DB)
  • Nie używa pytań bezpieczeństwa
  • Oddzielenie danych użytkownika i profilu jest bardzo miłe
  • Bardzo rozsądny model bezpieczeństwa dotyczący nieudanych prób logowania (dobra ochrona przed botami i atakami DoS)

(Drobne) Wady

  • Kody utraconych haseł nie są mieszane w DB
  • Zawiera natywną (słabą) CAPTCHA, co jest miłe dla tych, którzy nie chcą polegać na usłudze reCAPTCHA (należącej do Google), ale tak naprawdę nie jest wystarczająco bezpieczny
  • Bardzo rzadka dokumentacja online (tutaj drobny problem, ponieważ kod jest dobrze udokumentowany i intuicyjny)

Pobierz Tank Auth tutaj


Oryginalna odpowiedź:

Zaimplementowałem również własne (obecnie około 80% wykonanych po kilku tygodniach pracy). Najpierw wypróbowałem wszystkie pozostałe; FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered i kilka innych. Żadne z nich nie dorównywało IMO, albo brakowało im podstawowych funkcji, z natury NIEBEZPIECZNYCH, albo było zbyt rozdęte jak na mój gust.

Właściwie zrobiłem szczegółowy przegląd wszystkich bibliotek uwierzytelniających CodeIgniter, kiedy je testowałem (tuż po Nowym Roku). FWIW, podzielę się tym z tobą:

DX Auth

Plusy

  • Bardzo w pełni funkcjonalny
  • Średni rozmiar (ponad 25 plików), ale wydaje się być dość szczupły
  • Doskonała dokumentacja, choć niektóre są w nieco zepsutym języku angielskim
  • Obsługa plików językowych
  • Obsługa reCAPTCHA
  • Podłącza się do systemu sprawdzania poprawności CI
  • E-maile aktywacyjne
  • Nieaktywowane konta wygasają automatycznie
  • Sugeruje grc.com dla soli (nieźle jak na PRNG)
  • Banowanie z zapisanymi ciągami „przyczyny”
  • Prosta, ale skuteczna obsługa błędów

Cons

  • Pozwala tylko użytkownikom „zresetować” utracone hasło (zamiast pozwolić im wybrać nowe przy ponownej aktywacji)
  • Model pseudo-zdarzeń homebrew - dobra intencja, ale nie trafia w sedno
  • Dwa pola haseł w tabeli użytkowników, zły styl
  • Wykorzystuje dwie oddzielne tabele użytkowników (jedna dla użytkowników tymczasowych - niejednoznaczna i nadmiarowa)
  • Używa potencjalnie niebezpiecznego mieszania md5
  • Nieudane próby logowania zapisane tylko przez IP, a nie według nazwy użytkownika - niebezpieczne!
  • Klucz autologin nie jest mieszany w bazie danych - praktycznie tak niebezpieczny jak przechowywanie haseł w postaci czystego tekstu!
  • System ról to kompletny bałagan: funkcja is_admin z zakodowanymi nazwami ról, is_role kompletny bałagan, check_uri_permissions to bałagan, cała tabela uprawnień jest złym pomysłem (URI może zmieniać i renderować strony bez ochrony; uprawnienia powinny być zawsze przechowywane dokładnie gdzie jest wrażliwa logika). Łamacz kruponów!
  • Obejmuje natywną (słabą) CAPTCHA
  • Interfejs funkcji reCAPTCHA jest nieuporządkowany

FreakAuth Light

Plusy

  • Bardzo w pełni funkcjonalny
  • Przeważnie całkiem dobrze udokumentowany kod
  • Oddzielenie danych użytkownika i profilu to miły akcent
  • Podłącza się do systemu sprawdzania poprawności CI
  • E-maile aktywacyjne
  • Obsługa plików językowych
  • Aktywnie rozwinięty

Cons

  • Czuje się nieco wzdęty (ponad 50 plików)
  • A jednak nie ma automatycznego logowania do plików cookie (!)
  • Nie obsługuje logowania przy użyciu nazwy użytkownika i adresu e-mail
  • Wygląda na to, że występują problemy ze znakami UTF-8
  • Wymaga dużo automatycznego ładowania (utrudnia wydajność)
  • Źle zarządzany plik konfiguracyjny
  • Straszna separacja kontrolerów od widoku, z dużą ilością logiki programu w widokach i wyjściem zakodowanym na stałe w kontrolerach. Łamacz kruponów!
  • Słaby kod HTML w dołączonych widokach
  • Obejmuje niespełniający normy CAPTCHA
  • Komentowane debugowanie rozbrzmiewa wszędzie
  • Wymusza określoną strukturę folderów
  • Wymusza określoną bibliotekę Ajax (można ją przełączać, ale przede wszystkim nie powinno jej być)
  • Brak maksymalnego limitu prób logowania - BARDZO niebezpieczny! Łamacz kruponów!
  • Porywacze sprawdzają poprawność formularza
  • Używa potencjalnie niebezpiecznego mieszania md5

użytkownik_komputera

Plusy

  • Dobry zestaw funkcji ze względu na niewielką powierzchnię
  • Lekki, bez wzdęć (3 pliki)
  • Eleganckie automatyczne logowanie do plików cookie
  • Pochodzi z opcjonalną implementacją testu (miły dotyk)

Cons

  • Używa starej składni bazy danych CI (mniej bezpieczne)
  • Nie łączy się z systemem sprawdzania poprawności CI
  • Nieintuicyjny system statusu (roli) (indeksy do góry nogami - niepraktyczne)
  • Używa potencjalnie niebezpiecznego mieszania sha1

Świeża moc

Plusy

  • Mały ślad (6 plików)

Cons

  • Brakuje wielu niezbędnych funkcji. Łamacz kruponów!
  • Wszystko jest zakodowane na stałe. Łamacz kruponów!

Redux / Ion Auth

Według wiki CodeIgniter , Redux zostało przerwane, ale rozwidlenie Ion Auth rozwija się dobrze: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth to dobrze wyposażona biblioteka, która nie jest zbyt ciężka ani zbyt zaawansowana. W większości przypadków jego zestaw funkcji będzie więcej niż spełniał wymagania projektu.

Plusy

  • Lekki i prosty w integracji z CodeIgniter
  • Obsługuje wysyłanie wiadomości e-mail bezpośrednio z biblioteki
  • Dobrze udokumentowana online i dobra aktywna społeczność deweloperów / użytkowników
  • Prosty do wdrożenia w projekcie

Cons

  • Bardziej złożony schemat DB niż niektóre inne
  • W niektórych obszarach dokumentacji brakuje szczegółów

SimpleLoginSecure

Plusy

  • Mały ślad (4 pliki)
  • Minimalistyczny, absolutnie bez wzdęć
  • Używa phpass do mieszania (doskonałe)

Cons

  • Zaloguj się, wyloguj, utwórz i usuń
  • Brakuje wielu niezbędnych funkcji. Łamacz kruponów!
  • Bardziej jako punkt wyjścia niż biblioteka

Nie zrozum mnie źle: nie chcę lekceważyć żadnej z powyższych bibliotek; Jestem pod wielkim wrażeniem tego, co osiągnęli ich programiści i jak daleko zaszli każdy z nich, i nie jestem ponad tym, że ponownie wykorzystuję część ich kodu do zbudowania własnego. Mówię o tym, że czasami w tych projektach nacisk kładzie się z podstawowych „potrzebnych rzeczy” (takich jak twarde praktyki bezpieczeństwa) na łagodniejsze „miłe do zrobienia”, i mam nadzieję to naprawić .

Dlatego: powrót do podstaw.

Uwierzytelnienie dla CodeIgniter wykonane poprawnie

Oto moja MINIMALNA wymagana lista funkcji z biblioteki uwierzytelniania. Zdarza się też, że jest podzbiorem listy funkcji mojej biblioteki;)

  1. Mały ślad z opcjonalną implementacją testu
  2. Pełna dokumentacja
  3. Nie wymaga automatycznego ładowania. Ładowanie bibliotek w samą porę w celu zwiększenia wydajności
  4. Obsługa plików językowych; bez zakodowanych ciągów
  5. reCAPTCHA obsługiwane, ale opcjonalne
  6. Zalecane PRAWDZIWE losowe generowanie soli (np. Za pomocą random.org lub random.irb.hr)
  7. Opcjonalne dodatki do obsługi logowania stron trzecich (OpenID, Facebook Connect, konto Google itp.)
  8. Zaloguj się przy użyciu nazwy użytkownika lub adresu e-mail
  9. Rozdzielenie danych użytkownika i profilu
  10. E-maile dotyczące aktywacji i utraconych haseł
  11. Funkcja automatycznego logowania do plików cookie
  12. Konfigurowalny phpass do mieszania (oczywiście właściwie solony!)
  13. Mieszanie haseł
  14. Mieszanie kodów autologin
  15. Mieszanie zgubionych kodów haseł
  16. Podłącza się do systemu sprawdzania poprawności CI
  17. Bez pytań bezpieczeństwa!
  18. Wymuszone zasady silnych haseł po stronie serwera z opcjonalnym walidatorem po stronie klienta (Javascript)
  19. Wymuszona maksymalna liczba nieudanych prób logowania przy pomocy środków NAJLEPSZYCH PRAKTYK zarówno przeciwko atakom słownikowym, jak i DoS!
  20. Cały dostęp do bazy danych odbywa się poprzez przygotowane (powiązane) instrukcje!

Uwaga: te ostatnie kilka punktów nie jest przesadą o bardzo wysokim poziomie bezpieczeństwa, której nie potrzebujesz w swojej aplikacji internetowej. Jeśli biblioteka uwierzytelniająca nie spełnia tych standardów bezpieczeństwa w 100%, NIE UŻYWAJ!

Ostatnie głośne przykłady nieodpowiedzialnych programistów, którzy usunęli ich ze swojego oprogramowania: # 17 to sposób, w jaki e-mail Sarah Palin AOL został zhakowany podczas kampanii prezydenckiej; nieprzyjemna kombinacja # 18 i # 19 była ostatnio winowajcą, gdy włamano się na konta Britney Spears, Baracka Obamy, Fox News i innych; a tylko # 20 to sposób, w jaki chińskim hakerom udało się ukraść 9 milionów danych osobowych z ponad 70 000 koreańskich stron internetowych w jednym zaatakowanym automacie w 2008 roku.

Te ataki nie są operacjami mózgu. Jeśli pozostawisz szeroko otwarte tylne drzwi, nie powinieneś się łudzić fałszywym poczuciem bezpieczeństwa, ryglując przód. Co więcej, jeśli na tyle poważnie podchodzisz do kodowania, aby wybrać środowisko najlepszych praktyk, takie jak CodeIgniter, jesteś winien sobie, aby przynajmniej odpowiednio wykonać najbardziej podstawowe środki bezpieczeństwa.


<rant>

Zasadniczo oto, jak to jest: nie dbam o to, czy biblioteka auth oferuje wiele funkcji, zaawansowane zarządzanie rolami, zgodność z PHP4, ładne czcionki CAPTCHA, tabele krajów, kompletne panele administracyjne, dzwonki i gwizdki - jeśli biblioteka faktycznie robi moja witryna jest mniej bezpieczna, ponieważ nie przestrzegam najlepszych praktyk. To pakiet uwierzytelniający ; musi zrobić jedną właściwą rzecz: Uwierzytelnianie. Jeśli nie udaje mu się to , to rzeczywiście robi więcej szkody niż pożytku.

</rant>

/ Jens Roland

Jens Roland
źródło
1
Nadal jestem na tym etapie, natrafiłem na paskudny problem architektury i musiałem wybrać między zhakowaniem razem szybkiego obejścia (które działałoby dobrze, ale cierpiałoby na ścisłe połączenie), lub usiąść i zastanowić się, jak zrobić to dobrze . Wybrałem tę drugą opcję i wciąż jej nie złamałem: D
Jens Roland
2
Jens, możesz spojrzeć na Tank Auth, który wydaje się być stworzony w odpowiedzi na twój (doskonały) post: codeigniter.com/forums/viewthread/110993
Richard M
8
Czy możesz zaktualizować ten post i porównać z Ion-Auth (pochodzącym z dx-auth)? Wygląda na to, że ion-auth jest bardziej aktualny i aktywny niż auth-tank w tym momencie. Chcę wiedzieć z punktu widzenia bezpieczeństwa, czy jest tak dobry jak Tank-auth, czy nie, ponieważ ma kilka dodatkowych funkcji, które mogą być przydatne.
Vijay
1
Wszystkie te biblioteki używają mysql .. jednak używam MongoDb, który jest bazą danych noSql. Czy istnieje biblioteka współpracująca z MoongoDB? Próbowałem przekonwertować jedną z powyższych bibliotek, aby wstawić ją do MongoDB zamiast MySql, ale robi się to zbyt skomplikowane i chciałbym poznać bibliotekę, która już to robi
Ninja,
2
@Lykos: Pewnie - dane użytkownika byłyby danymi specyficznymi dla autorów, takimi jak UserID, UserName, Email, PasswordHash, LastLoginTime itp. Dane profilu powinny być przechowywane w osobnej tabeli DB i mogą być dowolne, w zależności od konkretnej aplikacji. Może to obejmować takie rzeczy, jak urodziny, płeć, miasto rodzinne, ocena reputacji itp. W ten sposób programiści aplikacji mogą modyfikować tabelę ProfileData w dowolny sposób, bez martwienia się, że system uwierzytelniania nagle się zepsuje.
Jens Roland
58

Pamiętaj, że „kompleksowa lista” Jensa Rolanda nie obejmuje ról użytkowników. Jeśli chcesz przypisać różne role użytkownika (takie jak admin / user lub admin / editor / user), te biblioteki zezwalają na to:

  • Ion_Auth (przepisanie Redux)
  • Redux
  • Backend Pro

Tank_Auth (nr 1 powyżej na liście Jensa) nie ma ról użytkownika. Zdaję sobie sprawę, że nie jest to dokładnie część uwierzytelniania, ale od tego czasu

  • uwierzytelnianie i zarządzanie rolami są obsługiwane po załadowaniu strony
  • Oba dotyczą bezpieczeństwa
  • Ten sam stół / model może być użyty dla obu.
  • Oba można skonfigurować tak, aby ładowały się w konstruktorze kontrolera (lub nawet automatycznie ładowały się)

Sensowne jest posiadanie jednej biblioteki do obsługi obu, jeśli jest to potrzebne. Z tego powodu przełączam się na Ion_Auth z Tank_Auth.

Burton Kent
źródło
Ach, rozumiesz, to naprawdę dobrze wiedzieć - miło mieć wszystkie aspekty w jednej bibliotece, dzięki czemu wszystko jest proste i funkcjonalne. Z tego powodu będę musiał zajrzeć do Ion_Auth! Dzięki Burton!
Edd Twilbeck,
4
Jest to oczywiście dobra uwaga, a zarządzanie rolami (ogólnie autoryzacja) jest centralną częścią wielu witryn, ściśle powiązanych z systemem uwierzytelniania. Mimo to wybiorę bezpieczny system uwierzytelniania z uproszczonym lub nieistniejącym zarządzaniem rolami w stosunku do podatnego systemu uwierzytelniania z zaawansowanym wbudowanym zarządzaniem rolami każdego dnia.
Jens Roland
Ion_Auth działa dobrze z CI 2.1, a DataMapper ORM
user482594
37

Ion_auth! Wygląda bardzo obiecująco i zajmuje niewiele miejsca! Podoba mi się..

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

Marko
źródło
Ion Auth również działa dobrze dla mnie, ma wszystko, czego potrzebuję i nic, czego nie potrzebuję (jak tajne pytania i polubienia).
SolidSmile
1
Ion Auth wygląda jak obecny lider pod względem użytkowania, funkcji i lekkości.
pbreitenbach,
5
Próbowałem zarówno Tank Auth, jak i Ion Auth i mogę powiedzieć, że kod Tank Auth jest znacznie bardziej przejrzysty, łatwiejszy do zrozumienia i łatwiejszy do rozszerzenia niż Ion Auth. Z drugiej strony Ion Auth obsługuje „role”.
Jonathan
30

Jestem programistą Redux Auth, a niektóre z wymienionych przez ciebie problemów zostały naprawione w wersji 2 beta. Możesz pobrać to również z oficjalnej strony z przykładową aplikacją.

  • Wymaga automatycznego ładowania (utrudnia wydajność)
  • Wykorzystuje z natury niebezpieczną koncepcję „pytań bezpieczeństwa”. Łamacz kruponów!

Pytania bezpieczeństwa nie są teraz używane i wprowadzono prostszy system zapomnianego hasła.

  • Typy zwracane są trochę mieszanką prawdziwych, fałszywych, błędów i kodów sukcesu

Zostało to naprawione w wersji 2 i zwraca wartości logiczne. Nienawidziłem hodgepodge tak samo jak ty.

  • Nie łączy się z systemem sprawdzania poprawności CI

Przykładowa aplikacja korzysta z systemu sprawdzania poprawności CI.

  • Nie zezwala użytkownikowi na ponowne przesłanie kodu „utraconego hasła”

Praca w toku

Zaimplementowałem również inne funkcje, takie jak widoki wiadomości e-mail, co daje możliwość korzystania z pomocników CodeIgniter w wiadomościach e-mail.

To wciąż praca w toku, więc jeśli masz jakieś sugestie, nie przestawaj je otrzymywać.

-Prażona kukurydza

Ps: Dziękujemy za polecenie Redux.

Svish
źródło
1
O, cześć Mathew - i dzięki za poświęcenie czasu na odpowiedź na mój post. Wersja beta brzmi bardzo interesująco - jak jestem pewien, zauważyłeś, że Redux już najbardziej zbliżył się do prawidłowego rozwiązania w moim podsumowaniu, więc zajmę się tym od razu.
Jens Roland
Rzuciłem okiem na wątek CI Forum i mapę drogową. Wygląda dobrze - w odniesieniu do soli „dynamicznych” polecam konkatenację (data reg.). (klucz skrótu pliku konfiguracyjnego). (kod lub hasło), aby udaremnić tęczowe tabele i brutalną siłę w skradzionej bazie danych
Jens Roland
Poza tym mam kilka przemyśleń na temat sprawdzonych metod uwierzytelniania ( stackoverflow.com/questions/549/... ) i ograniczania botnetów ( stackoverflow.com/questions/479233/... ), które możesz chcieć przejechać
Jens Roland
14

Natknąłem się na Flexi Auth ( http://haseydesign.com/flexi-auth/ ). Wygląda bardzo obiecująco i zacząłem go używać. Ma funkcje cudowne. W pełni integruje się z CI i zawiera dwa różne pliki bibliotek, w których jeden jest bardzo obciążony wszystkimi funkcjami, a drugi zawiera tylko sprawdzania poprawności.

Jedną z najlepszych jest to, że nowo zarejestrowany członek otrzymuje tymczasowy dostęp przez określony czas na stronie, dopóki nie kliknie linku z e-maila i aktywuje się.

Suthan Bala
źródło
Dzięki za ten link. Ma także kolejną dobrą cechę Flexi Cart haseydesign.com/flexi-cart .
Vir
13

Może znajdziesz Redux odpowiadające Twoim potrzebom. To nie jest przesada i jest zapakowany tylko z nagimi funkcjami, których większość z nas potrzebowałaby. Twórcy i współautorzy byli bardzo surowi w kwestii tego, jaki kod został dodany.

To jest oficjalna strona

Filip Dupanović
źródło
1
czy bieżąca wersja obsługuje najnowszą wersję Code Igniter? Wygląda na to, że aktualizacja nie trwała długo. W przeciwnym razie lubię to.
GavinR
Używam Redux z najnowszą wersją CI w witrynie produkcyjnej. Jest bardzo lekki, podobnie jak CI i bardzo konfigurowalny.
GloryFish
1
Redux jest już utrzymany, patrz ta dyskusja. codeigniter.com/forums/viewthread/145342
The Pixel Developer
Ion Auth jest oparty na Redux Auth 2 i to z niego skorzystam. PyroCMS również go używa. github.com/benedmunds/CodeIgniter-Ion-Auth
Robert Audi
8

Ion_Auth bije tank_auth głównie z dwóch powodów, ról użytkownika i dokumentacji, tych dwóch brakuje w tank_auth.

nedu
źródło
4

Zobacz także BackendPro

Ostatecznie prawdopodobnie skończysz pisać coś niestandardowego, ale nie ma nic złego w pożyczaniu koncepcji od DX Auth, Freak Auth, BackendPro itp.

Moje doświadczenia z aplikacjami w pakiecie są takie, że są one specyficzne dla niektórych struktur i miałem problemy z integracją ich z własnymi aplikacjami bez konieczności włamań, więc jeśli pakiet wstępny zawiera aktualizację, muszę je migrować.

Używam również Smarty i ADOdb w kodzie CI, więc bez względu na to, co zawsze skończę, wprowadzam poważne zmiany w kodzie.

Adam
źródło
3

Tank Auth wygląda dobrze, ale dokumentacja to tylko jednostronicowe objaśnienie instalacji, a także szybkie przeglądanie każdego pliku PHP. Przynajmniej tyle znalazłem po wielu Googlingach. Być może to, co ludzie mają na myśli powyżej, gdy mówią, że Tank Auth jest dobrze udokumentowany, to to, że kod jest dobrze skomentowany. To dobrze, ale różni się od dokumentacji. Byłoby miło mieć dokumentację na temat integracji funkcji Tank Auth z istniejącym kodem.

użytkownik1284303
źródło
3

Próbuję Ion_Auth i doceniam to, przy okazji ...

SimpleLoginSecure Sprawia, że ​​uwierzytelnianie jest proste i bezpieczne.

Fabiano Shark
źródło