Wie sollte ich eine Authentifizierungsbibliothek für CodeIgniter auswählen?

Ich sehe, es gibt ein paar . Welche sind gepflegt und einfach zu bedienen? Was sind ihre Vor- und Nachteile?

Update (14. Mai 2010):

Es stellt sich heraus, dass der russische Entwickler Ilya Konyukhov nach dem Lesen den Handschuh genommen hat und eine neue Authentifizierungsbibliothek für CI basierend auf DX Auth erstellt hat, die den folgenden Empfehlungen und Anforderungen folgt.

Und der resultierende Tank Auth sieht wie die Antwort auf die Frage des OP aus. Ich werde hier einen Strich durch die Rechnung machen und Tank Auth die beste heute verfügbare Authentifizierungsbibliothek für CodeIgniter nennen. Es ist eine grundsolide Bibliothek, die alle functionen hat, die Sie brauchen, und keine, die Sie brauchen:

Tankauth

Pros

  • Voll ausgestattet
  • Lean Footprint (20 Dateien) unter Berücksichtigung des Feature-Sets
  • Sehr gute Dokumentation
  • Einfaches und elegantes databasedesign (nur 4 DB-Tabellen)
  • Die meisten functionen sind optional und einfach zu konfigurieren
  • Unterstützung von Sprachdateien
  • reCAPTCHA unterstützt
  • Hooks in das validationssystem von CI
  • Aktivierungs-E-Mails
  • Login mit E-Mail, Benutzername oder beides (konfigurierbar)
  • Nicht aktivierte Konten werden automatisch ablaufen
  • Einfache, aber effektive Fehlerbehandlung
  • Verwendet phpass für Hashing (und hashes autologin codes in der DB)
  • Verwendet keine Sicherheitsfragen
  • Trennung von Benutzer- und Profildaten ist sehr nett
  • Sehr vernünftiges Sicherheitsmodell um fehlgeschlagene Login-Versuche (guter Schutz vor Bots und DoS-Attacken)

(Geringfügig) Nachteile

  • Verlorene Passwortcodes sind im DB nicht gehasht
  • Enthält ein natives (schlechtes) CAPTCHA, das für diejenigen geeignet ist, die sich nicht auf den (eigenen) reCAPTCHA-Dienst verlassen wollen, aber es ist wirklich nicht sicher genug
  • Sehr spärliche Online-Dokumentation (geringfügiges Problem hier, da der Code schön dokumentiert und intuitiv ist)

Lade Tank Auth hier herunter


Ursprüngliche Antwort:

Ich habe auch meine eigenen implementiert (derzeit etwa 80% nach ein paar Wochen Arbeit). Ich habe zuerst alle anderen versucht; FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Frisch-Powered und noch ein paar mehr. Keiner von ihnen war auf Augenhöhe, IMO, entweder hatten sie keine grundlegenden functionen, waren von Natur aus nicht sicher oder zu aufgebläht für meinen Geschmack.

Tatsächlich habe ich eine detaillierte Zusammenfassung aller Authentifizierungsbibliotheken für CodeIgniter erstellt, als ich sie getestet habe (kurz nach Neujahr). FWIW, ich werde es mit dir teilen:

DX Auth

Pros

  • Sehr voll ausgestattet
  • Medium Footprint (25+ Dateien), schafft es aber, sich ziemlich schlank zu fühlen
  • Ausgezeichnete Dokumentation, obwohl einige in leicht gebrochenem Englisch sind
  • Unterstützung von Sprachdateien
  • reCAPTCHA unterstützt
  • Hooks in das validationssystem von CI
  • Aktivierungs-E-Mails
  • Nicht aktivierte Konten werden automatisch ablaufen
  • Schlägt grc.com für Salze vor (nicht schlecht für einen PRNG)
  • Verbot mit gespeicherten “Grund” -Strings
  • Einfache, aber effektive Fehlerbehandlung

Nachteile

  • Lässt Benutzer nur ein verlorenes Passwort zurücksetzen (anstatt sie nach der Reaktivierung neu zu wählen)
  • Homebrew Pseudo-Event-Modell – gute Absicht, aber vermisst die Marke
  • Zwei Passwortfelder in der Benutzertabelle, schlechter Stil
  • Verwendet zwei separate Benutzertabellen (eine für ‘temp’ Benutzer – mehrdeutig und redundant)
  • Verwendet möglicherweise unsicheres MD5-Hashing
  • Fehlgeschlagene Anmeldeversuche werden nur nach IP, nicht nach Benutzername gespeichert – unsicher!
  • Der Autologin-Schlüssel wurde nicht in der database gehasht – praktisch so unsicher wie das Speichern von Passwörtern im Klartext!
  • Rollensystem ist ein komplettes Chaos: is_admin function mit hart-codierten Rollennamen, is_role ein komplettes Chaos, check_uri_permissions ist ein Durcheinander, die ganze Tabelle Berechtigungen ist eine schlechte Idee (ein URI kann ändern und Seiten ungeschützt rendern; Berechtigungen sollten immer genau gespeichert werden wo die empfindliche Logik ist). Dealbreaker!
  • Enthält ein natives (schlechtes) CAPTCHA
  • ReCAPTCHA-functionsschnittstelle ist unordentlich

FreakAuth Licht

Pros

  • Sehr voll ausgestattet
  • Meist recht gut dokumentierter Code
  • Trennung von Benutzer- und Profildaten ist eine nette Geste
  • Hooks in das validationssystem von CI
  • Aktivierungs-E-Mails
  • Unterstützung von Sprachdateien
  • Aktiv entwickelt

Nachteile

  • Fühlt sich etwas aufgebläht (50+ Dateien)
  • Und trotzdem fehlt die automatische Cookie-Anmeldung (!)
  • Logins mit Benutzername und E-Mail werden nicht unterstützt
  • Scheint Probleme mit UTF-8-Zeichen zu haben
  • Benötigt viel Autoloading (Performance-Behinderung)
  • Schlecht mikromanaged Konfigurationsdatei
  • Schreckliche View-Controller-Trennung, mit viel Programmlogik in Sichten und Ausgabe in Controllern fest codiert. Dealbreaker!
  • Schlechter HTML-Code in den enthaltenen Ansichten
  • Enthält minderwertige CAPTCHA
  • Kommentierte Debug-Echos überall
  • Erzwingt eine bestimmte Ordnerstruktur
  • Erzwingt eine bestimmte Ajax-Bibliothek (kann umgeschaltet werden, sollte aber nicht an erster Stelle stehen)
  • Keine Höchstgrenze für Anmeldeversuche – sehr unsicher! Dealbreaker!
  • Hijacks Formular validation
  • Verwendet möglicherweise unsicheres MD5-Hashing

pc_benutzer

Pros

  • Gute function für seinen geringen Platzbedarf
  • Leicht, keine Aufblähung (3 Dateien)
  • Elegante automatische Cookie-Anmeldung
  • Kommt mit optionaler Test-Implementierung (nette Berührung)

Nachteile

  • Verwendet die alte CI-databasesyntax (weniger sicher)
  • Hängt nicht in das validationssystem von CI ein
  • Ein bisschen unintuitives Status- (Rollen-) System (Indizes auf den Kopf gestellt – unpraktisch)
  • Verwendet möglicherweise unsicheres sha1-Hashing

Frisch angetrieben

Pros

  • Geringer Platzbedarf (6 Dateien)

Nachteile

  • Es fehlen viele wesentliche functionen. Dealbreaker!
  • Alles ist fest codiert. Dealbreaker!

Redux / ionicauth

Laut dem CodeIgniter-Wiki wurde Redux eingestellt, aber der Ion Auth-Fork wird stark: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth ist eine gut ausgestattete Bibliothek ohne zu schwer oder zu fortgeschritten. In den meisten Fällen wird das Feature-Set die Anforderungen eines Projekts mehr als erfüllen.

Pros

  • Leicht und einfach mit CodeIgniter zu integrieren
  • Unterstützt das Senden von E-Mails direkt aus der Bibliothek
  • Gut dokumentiert online und gute aktive dev / user community
  • Einfach in ein Projekt zu implementieren

Nachteile

  • Komplexeres DB-Schema als einige andere
  • In einigen Bereichen fehlt die Dokumentation

SimpleLoginSecure

Pros

  • Kleiner Fußabdruck (4 Dateien)
  • Minimalistisch, absolut keine Bloat
  • Verwendet phpass für Hashing (ausgezeichnet)

Nachteile

  • Nur einloggen, abmelden, erstellen und löschen
  • Es fehlen viele wesentliche functionen. Dealbreaker!
  • Mehr ein Ausgangspunkt als eine Bibliothek

Versteh mich nicht falsch: Ich möchte keine der oben genannten Bibliotheken respektlos behandeln; Ich bin sehr beeindruckt von dem, was ihre Entwickler erreicht haben und wie weit jeder von ihnen gekommen ist, und ich bin nicht bereit, etwas von ihrem Code wiederzuverwenden, um mein eigenes zu erstellen. Was ich sagen will, ist, dass sich manchmal bei diesen Projekten der Fokus von den essentiellen “Not-zu-Haben” (wie harte Sicherheitspraktiken) hin zu weicheren “Nice-to-Haves” verlagert, und das hoffe ich zu beheben .

Deshalb: zurück zu den Grundlagen.

Authentifizierung für CodeIgniter richtig gemacht

Hier ist meine MINIMAL-Liste von functionen aus einer Authentifizierungsbibliothek. Es ist auch eine Teilmenge der Feature-Liste meiner eigenen Bibliothek;)

  1. Kleiner Footprint mit optionaler Test-Implementierung
  2. Vollständige Dokumentation
  3. Kein Autoloading erforderlich. Just-in-Time-Laden von Bibliotheken für die performance
  4. Unterstützung von Sprachdateien; keine fest codierten Strings
  5. reCAPTCHA unterstützt, aber optional
  6. Empfohlene WAHR zufällige Salzgenerierung (zB mit random.org oder random.irb.hr)
  7. Optionale Add-ons zur Unterstützung der Anmeldung von Drittanbietern (OpenID, Facebook Connect, Google-Konto usw.)
  8. Einloggen mit Benutzername oder E-Mail
  9. Trennung von Benutzer- und Profildaten
  10. E-Mails zur Aktivierung und verlorene Passwörter
  11. Automatische Cookie-Login-function
  12. Konfigurierbarer Phpass für Hashing (natürlich richtig gesalzen!)
  13. Hashing von Passwörtern
  14. Hashing von Autologin-Codes
  15. Hashing von verlorenen Passwort-Codes
  16. Hooks in das validationssystem von CI
  17. KEINE Sicherheitsfragen!
  18. Erzwungene strenge Passwortrichtlinie serverseitig mit optionalem clientseitigen (JavaScript) Validator
  19. Erzwungene maximale Anzahl von fehlgeschlagenen Anmeldeversuchen mit BEST PRACTICES Gegenmaßnahmen gegen Wörterbuch- und DoS-Angriffe!
  20. Alle databasezugriffe erfolgen über vorbereitete (gebundene) statementen!

Hinweis: Diese letzten Punkte sind keine Super-Hochsicherheits-Overkills, die Sie für Ihre Webanwendung nicht benötigen. Wenn eine Authentifizierungsbibliothek diese Sicherheitsstandards nicht 100% erfüllt, BENUTZEN SIE SIE NICHT!

Kürzliche prominente Beispiele unverantwortlicher Programmierer, die sie aus ihrer Software ausgeschlossen haben: Nr. 17 ist, wie Sarah Palins AOL-E-Mail während der Präsidentschaftskampagne gehackt wurde; Eine schlimme Kombination von # 18 und # 19 war der Schuldige, als kürzlich die Twitter-Accounts von Britney Spears, Barack Obama, Fox News und anderen gehackt wurden; und # 20 allein ist es, wie chinesische Hacker 9 Millionen persönliche Informationen von mehr als 70.000 koreanischen Webseiten in einem automatisierten Hack 2008 stehlen konnten.

Diese Angriffe sind keine Gehirnoperation. Wenn Sie Ihre Hintertüren weit offen lassen, sollten Sie sich nicht in ein falsches Gefühl der Sicherheit täuschen, indem Sie die Front verschrauben. Wenn Sie es ernst meinen mit dem Programmieren, um ein Best-Practice-Framework wie CodeIgniter zu wählen, dann sind Sie es sich selbst schuldig, zumindest die grundlegendsten Sicherheitsmaßnahmen richtig zu machen.


Im Prinzip ist es so: Es ist mir egal, ob eine Auth-Bibliothek eine Reihe von functionen, erweitertes Rollenmanagement, PHP4-Kompatibilität, hübsche CAPTCHA-Fonts, Landtabellen, komplette Admin-Panels, Schnickschnack bietet – wenn die Bibliothek tatsächlich funktioniert Meine Website ist weniger sicher, weil ich nicht den Best Practices folge. Es ist ein Authentifizierungspaket ; Es muss eine Sache richtig gemacht werden: Authentifizierung. Wenn es das nicht tut , tut es mehr Schaden als Nutzen.

/ Jens Roland

Beachten Sie, dass die “umfassende Auflistung” von Jens Roland keine Benutzerrollen enthält. Wenn Sie verschiedene Benutzerrollen zuweisen möchten (wie admin / user oder admin / editor / user), erlauben diese Bibliotheken:

  • Ion_Auth (Neu schreiben von Redux)
  • Redux
  • Backend Pro

Tank_Auth (Nummer 1 oben in Jens Liste) hat keine Benutzerrollen. Ich weiß, dass es nicht genau Teil der Authentifizierung ist, aber seit

  • Authentifizierung und Rollenverwaltung werden beide beim Laden der Seite behandelt
  • Beides beinhaltet Sicherheit
  • Dieselbe Tabelle / dasselbe Modell kann für beide verwendet werden.
  • Beide können so konfiguriert werden, dass sie im Controller-Konstruktor geladen werden (oder sogar automatisch geladen werden)

Es macht sehr viel Sinn, eine Bibliothek zu haben, die beides beherrscht, wenn Sie sie brauchen. Ich wechsle deshalb wegen Tank_Auth zu Ion_Auth.

Ion_auth! Sieht sehr vielversprechend und klein aus! Ich mag..

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

Ich bin der Entwickler von Redux Auth und einige der Probleme, die Sie erwähnt haben, wurden in der Version 2 Beta behoben. Sie können dies auch von der offiziellen Website mit einer Beispielanwendung herunterladen.

  • Erfordert Autoloading (Behinderung der performance)
  • Verwendet das von Natur aus unsichere Konzept von “Sicherheitsfragen”. Dealbreaker!

Sicherheitsfragen werden jetzt nicht mehr verwendet und ein einfacheres vergessenes Passwort-System wurde eingerichtet.

  • Rückgabetypen sind ein Sammelsurium von Wahr-, Falsch-, Fehler- und Erfolgscodes

Dies wurde in Version 2 behoben und gibt Boolesche Werte zurück. Ich hasste das Mischmasch so sehr wie du.

  • Hängt nicht in das validationssystem von CI ein

Die Beispielanwendung verwendet das validationssystem des CI.

  • Erlaubt einem Benutzer nicht, einen Code “verlorenes Passwort” erneut zu senden

In Arbeit

Ich habe auch einige andere functionen wie E-Mail-Ansichten implementiert, so dass Sie die Möglichkeit haben, die CodeIgniter-Helfer in Ihren E-Mails zu verwenden.

Es ist immer noch eine Arbeit in Arbeit. Wenn Sie weitere Vorschläge haben, halten Sie sie bitte bereit.

-Popcorn

PS: Danke, dass du Redux empfohlen hast.

Vielleicht finden Sie Redux für Ihre Bedürfnisse. Es ist kein Overkill und kommt nur mit bloßen Features, die die meisten von uns benötigen. Der Entwickler und die Mitwirkenden waren sehr streng darauf, welchen Code beigesteuert wurde.

Dies ist die offizielle Seite

Ich bin auf Flexi Auth gestoßen ( http://hasydesign.com/flexi-auth/ ). Es sieht sehr vielversprechend aus und ich habe angefangen es zu benutzen. Es hat wunderbare Eigenschaften. Vollständig in CI integriert, und kommt mit zwei verschiedenen Bibliotheksdateien, in denen eine sehr schwer mit allen functionen geladen ist und die andere nur die validationen enthält.

Eines der besten ist, dass das neu registrierte Mitglied für eine bestimmte Zeit auf der Website temporären Zugriff erhält, bis sie auf den Link von ihrer E-Mail klicken und aktivieren.

Ion_Auth schlägt tank_auth hauptsächlich aus zwei Gründen, Benutzerrollen und Dokumentation, diese beiden fehlen in tank_auth.

Ich benutze eine angepasste Version von DX Auth . Ich fand es einfach zu verwenden, extrem einfach zu modifizieren und es hat ein Benutzerhandbuch (mit großartigen Beispielen) , das dem Code Igniter sehr ähnlich ist.

Werfen Sie auch einen Blick auf BackendPro

Letztendlich wirst du wahrscheinlich am Ende etwas Brauchbares schreiben, aber es ist nichts falsch daran, Konzepte von DX Auth, Freak Auth, BackendPro usw. zu borgen.

Meine Erfahrungen mit den paketierten Apps beziehen sich auf bestimmte Strukturen und ich hatte Probleme, sie in meine eigenen Anwendungen zu integrieren, ohne dass Hacks erforderlich waren. Wenn das Paket dann aktualisiert wird, muss ich es migrieren.

Ich verwende auch Smarty und ADOdb in meinem CI-Code, also egal, was ich immer am Ende Codeänderungen vornehmen würde.

Tank Auth sieht gut aus, aber die Dokumentation ist nur eine einseitige Erklärung zur Installation und ein schneller Ablauf jeder PHP-Datei. Zumindest habe ich das nach viel Googeln gefunden. Vielleicht meinen die Leute, wenn sie sagen, dass Tank Auth gut dokumentiert ist, dass der Code gut kommentiert ist. Das ist eine gute Sache, aber anders als Dokumentation. Es wäre schön gewesen, eine Dokumentation darüber zu haben, wie Sie die functionen von Tank Auth in Ihren bestehenden Code integrieren können.

Ich versuche Ion_Auth und schätze es, übrigens …

SimpleLoginSecure Macht die Authentifizierung einfach und sicher.