Comment choisir une bibliothèque d'authentification pour CodeIgniter? [fermé]

398

Je vois qu'il y en a quelques-uns . Lesquels sont maintenus et faciles à utiliser? Quels sont leurs avantages et leurs inconvénients?

GavinR
la source
8
Si vous êtes toujours intéressé, regardez Tank Auth. Je viens de mettre à jour mon article ci-dessous après l'avoir examiné, et il est excellent.
Jens Roland
7
Merci pour la mise à jour! Ce sera une information précieuse pour les visiteurs de cette question à l'avenir, j'ai donc changé la réponse acceptée.
GavinR
3
Pourquoi la fermeture soudaine? Il semble très bien cadrer avec les six lignes directrices sur les questions subjectives.
Brian Ortiz
3
Nominé pour la réouverture. A parfaitement répondu à une question que j'avais (quels systèmes d'authentification dans CI valent la peine d'être examinés).
Cruachan
3
D'accord avec @BrianOrtiz et Cruachan: Pourquoi fermer? Bonne question et bonnes réponses.
Peter K.

Réponses:

465

Mise à jour (14 mai 2010):

Il s'avère que le développeur russe Ilya Konyukhov a récupéré le gant après avoir lu ceci et a créé une nouvelle bibliothèque d'authentification pour CI basée sur DX Auth, en suivant les recommandations et les exigences ci-dessous.

Et le Tank Auth résultant ressemble à la réponse à la question du PO. Je vais me lancer ici et appeler Tank Auth la meilleure bibliothèque d'authentification pour CodeIgniter disponible aujourd'hui. C'est une bibliothèque solide comme le roc qui a toutes les fonctionnalités dont vous avez besoin et aucun des ballonnements que vous n'avez pas:

Tank Auth

Avantages

  • Complet en vedette
  • Empreinte Lean (20 fichiers) compte tenu de l'ensemble des fonctionnalités
  • Très bonne documentation
  • Conception de base de données simple et élégante (seulement 4 tables DB)
  • La plupart des fonctionnalités sont facultatives et faciles à configurer
  • Prise en charge des fichiers de langue
  • reCAPTCHA pris en charge
  • Accroche au système de validation de CI
  • E-mails d'activation
  • Connectez-vous avec e-mail, nom d'utilisateur ou les deux (configurable)
  • Les comptes non activés expirent automatiquement
  • Gestion des erreurs simple mais efficace
  • Utilise phpass pour le hachage (et hache également les codes d'authentification automatique dans la base de données)
  • N'utilise pas de questions de sécurité
  • La séparation des données d'utilisateur et de profil est très agréable
  • Modèle de sécurité très raisonnable en cas d'échec des tentatives de connexion (bonne protection contre les robots et les attaques DoS)

(Mineur) Contre

  • Les codes de mot de passe perdus ne sont pas hachés dans la base de données
  • Comprend un CAPTCHA natif (pauvre), ce qui est bien pour ceux qui ne veulent pas dépendre du service reCAPTCHA (appartenant à Google), mais il n'est vraiment pas suffisamment sécurisé
  • Documentation en ligne très clairsemée (problème mineur ici, car le code est bien documenté et intuitif)

Téléchargez Tank Auth ici


Réponse originale:

J'ai également implémenté le mien (actuellement 80% environ est fait après quelques semaines de travail). J'ai essayé tous les autres en premier; FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered, et quelques autres. Aucun d'entre eux n'était à la hauteur, OMI, soit ils manquaient de fonctionnalités de base, intrinsèquement INsécurisés, ou trop gonflés à mon goût.

En fait, j'ai fait un tour d'horizon détaillé de toutes les bibliothèques d'authentification pour CodeIgniter lorsque je les testais (juste après le Nouvel An). FWIW, je vais le partager avec vous:

DX Auth

Avantages

  • Très complet
  • Empreinte moyenne (plus de 25 fichiers), mais parvient à se sentir assez mince
  • Excellente documentation, bien que certains soient en anglais légèrement cassé
  • Prise en charge des fichiers de langue
  • reCAPTCHA pris en charge
  • Accroche au système de validation de CI
  • E-mails d'activation
  • Les comptes non activés expirent automatiquement
  • Suggère grc.com pour les sels (pas mal pour un PRNG)
  • Interdiction avec des chaînes de «raisons» stockées
  • Gestion des erreurs simple mais efficace

Les inconvénients

  • Permet uniquement aux utilisateurs de «réinitialiser» un mot de passe perdu (plutôt que de les laisser en choisir un nouveau lors de la réactivation)
  • Modèle de pseudo-événement Homebrew - bonne intention, mais manque la marque
  • Deux champs de mot de passe dans la table utilisateur, mauvais style
  • Utilise deux tables d'utilisateurs distinctes (une pour les utilisateurs «temporaires» - ambiguës et redondantes)
  • Utilise le hachage md5 potentiellement dangereux
  • Les tentatives de connexion ont échoué uniquement stockées par IP, pas par nom d'utilisateur - dangereux!
  • La clé d'authentification n'est pas hachée dans la base de données - pratiquement aussi dangereuse que le stockage de mots de passe en texte clair!
  • Le système de rôles est un gâchis complet: la fonction is_admin avec des noms de rôle codés en dur, is_role un gâchis complet, check_uri_permissions est un gâchis, toute la table des autorisations est une mauvaise idée (un URI peut changer et rendre les pages non protégées; les autorisations doivent toujours être stockées exactement où se trouve la logique sensible). Dealbreaker!
  • Comprend un CAPTCHA natif (pauvre)
  • L'interface de la fonction reCAPTCHA est en désordre

FreakAuth Light

Avantages

  • Très complet
  • Code généralement assez bien documenté
  • La séparation des données d'utilisateur et de profil est une belle touche
  • Accroche au système de validation de CI
  • E-mails d'activation
  • Prise en charge des fichiers de langue
  • Développé activement

Les inconvénients

  • Se sent un peu gonflé (50+ fichiers)
  • Et pourtant, il manque une connexion automatique aux cookies (!)
  • Ne prend pas en charge les connexions avec le nom d'utilisateur et l'e-mail
  • Semble avoir des problèmes avec les caractères UTF-8
  • Nécessite beaucoup de chargement automatique (entrave les performances)
  • Fichier de configuration mal géré
  • Terrible séparation View-Controller, avec beaucoup de logique de programme dans les vues et la sortie codée en dur dans les contrôleurs. Dealbreaker!
  • Mauvais code HTML dans les vues incluses
  • Comprend CAPTCHA de qualité inférieure
  • Le débogage commenté résonne partout
  • Force une structure de dossiers spécifique
  • Force une bibliothèque Ajax spécifique (peut être changée, mais ne devrait pas être là en premier lieu)
  • Aucune limite maximale sur les tentatives de connexion - TRÈS dangereux! Dealbreaker!
  • Validation du formulaire de piratage
  • Utilise le hachage md5 potentiellement dangereux

pc_user

Avantages

  • Bon ensemble de fonctionnalités pour sa petite empreinte
  • Léger, pas de ballonnement (3 fichiers)
  • Connexion automatique élégante aux cookies
  • Livré avec une implémentation de test facultative (touche agréable)

Les inconvénients

  • Utilise l'ancienne syntaxe de la base de données CI (moins sûre)
  • Ne se connecte pas au système de validation de CI
  • Système de statut (rôle) peu intuitif (index à l'envers - impossible)
  • Utilise un hachage de sha1 potentiellement dangereux

Fresh Powered

Avantages

  • Petite empreinte (6 fichiers)

Les inconvénients

  • Manque beaucoup de fonctionnalités essentielles. Dealbreaker!
  • Tout est codé en dur. Dealbreaker!

Redux / Ion Auth

Selon le wiki CodeIgniter , Redux a été abandonné, mais la fourche Ion Auth se renforce: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth est une bibliothèque bien présentée sans être trop lourde ou insuffisamment avancée. Dans la plupart des cas, son ensemble de fonctionnalités répondra largement aux besoins d'un projet.

Avantages

  • Léger et simple à intégrer avec CodeIgniter
  • Prend en charge l'envoi d'e-mails directement depuis la bibliothèque
  • Bien documenté en ligne et bonne communauté de développeurs / utilisateurs actifs
  • Simple à mettre en œuvre dans un projet

Les inconvénients

  • Schéma DB plus complexe que certains autres
  • La documentation manque de détails dans certains domaines

SimpleLoginSecure

Avantages

  • Petite empreinte (4 fichiers)
  • Minimaliste, absolument pas de ballonnement
  • Utilise phpass pour le hachage (excellent)

Les inconvénients

  • Se connecter, se déconnecter, créer et supprimer uniquement
  • Manque beaucoup de fonctionnalités essentielles. Dealbreaker!
  • Plus d'un point de départ qu'une bibliothèque

Ne vous méprenez pas: je ne veux pas manquer de respect à l'une des bibliothèques ci-dessus; Je suis très impressionné par ce que leurs développeurs ont accompli et le chemin parcouru par chacun d'eux, et je ne suis pas au-dessus de réutiliser une partie de leur code pour créer le mien. Ce que je dis, c'est que, parfois, dans ces projets, l'accent passe des `` besoins indispensables '' (tels que les pratiques de sécurité difficiles) à des `` sympathiques '' plus doux, et c'est ce que j'espère y remédier. .

Par conséquent: retour aux sources.

Authentification pour CodeIgniter done droit

Voici ma liste MINIMALE de fonctionnalités requises à partir d'une bibliothèque d'authentification. Il se trouve également qu'il s'agit d'un sous-ensemble de la liste des fonctionnalités de ma propre bibliothèque;)

  1. Petite empreinte avec implémentation de test en option
  2. Documentation complète
  3. Aucun chargement automatique requis. Chargement juste à temps des bibliothèques pour des performances
  4. Prise en charge des fichiers de langue; pas de chaînes codées en dur
  5. reCAPTCHA pris en charge mais facultatif
  6. VRAIE génération de sel aléatoire recommandée (par exemple en utilisant random.org ou random.irb.hr)
  7. Modules complémentaires en option pour prendre en charge la connexion tierce (OpenID, Facebook Connect, compte Google, etc.)
  8. Connectez-vous en utilisant un nom d'utilisateur ou un e-mail
  9. Séparation des données d'utilisateur et de profil
  10. E-mails d'activation et mots de passe perdus
  11. Fonction de connexion automatique aux cookies
  12. Phpass configurable pour le hachage (correctement salé bien sûr!)
  13. Hachage de mots de passe
  14. Hachage des codes d'authentification automatique
  15. Hachage de codes de mot de passe perdus
  16. Accroche au système de validation de CI
  17. AUCUNE question de sécurité!
  18. Stratégie de mot de passe renforcée appliquée côté serveur, avec validateur optionnel côté client (Javascript)
  19. Nombre maximum de tentatives de connexion ayant échoué avec les contre- mesures BEST PRACTICES contre les attaques par dictionnaire et DoS!
  20. Tous les accès à la base de données se font via des instructions préparées (liées)!

Remarque: ces derniers points ne sont pas une surpuissance de très haute sécurité dont vous n'avez pas besoin pour votre application Web. Si une bibliothèque d'authentification ne répond pas à 100% à ces normes de sécurité, NE L'UTILISEZ PAS!

Exemples récents très médiatisés de codeurs irresponsables qui les ont laissés hors de leur logiciel: # 17 est la façon dont le courriel AOL de Sarah Palin a été piraté pendant la campagne présidentielle; une combinaison désagréable de # 18 et # 19 était le coupable récemment lorsque les comptes Twitter de Britney Spears, Barack Obama, Fox News et d'autres ont été piratés; et # 20 à lui seul est la façon dont les pirates chinois ont réussi à voler 9 millions d'éléments d'informations personnelles de plus de 70 000 sites Web coréens dans un hack automatisé en 2008.

Ces attaques ne sont pas une chirurgie cérébrale. Si vous laissez vos portes arrière grandes ouvertes, vous ne devriez pas vous leurrer dans un faux sentiment de sécurité en verrouillant l'avant. De plus, si vous êtes suffisamment sérieux au sujet du codage pour choisir un cadre de bonnes pratiques comme CodeIgniter, vous vous devez au moins de bien faire les mesures de sécurité les plus élémentaires .


<rant>

Fondamentalement, voici comment c'est: je ne me soucie pas si une bibliothèque d'authentification offre un tas de fonctionnalités, une gestion avancée des rôles, une compatibilité PHP4, de jolies polices CAPTCHA, des tableaux de pays, des panneaux d'administration complets, des cloches et des sifflets - si la bibliothèque fait réellement mon site est moins sécurisé en ne suivant pas les meilleures pratiques. C'est un package d' authentification ; il doit faire UNE chose correctement: l'authentification. Si elle ne parvient pas à faire cela , il est en train de faire plus de mal que de bien.

</rant>

/ Jens Roland

Jens Roland
la source
1
Je suis toujours là-dessus, j'ai rencontré un problème d'architecture désagréable et j'ai dû choisir entre pirater ensemble une solution rapide (qui fonctionnerait très bien mais souffrirait d'un couplage serré), ou s'asseoir et réfléchir sérieusement à la façon de le faire correctement . J'ai choisi cette dernière option, et je ne l'ai toujours pas craquée: D
Jens Roland
2
Jens, vous voudrez peut-être regarder Tank Auth qui semble avoir été créé en réponse à votre (excellent) message: codeigniter.com/forums/viewthread/110993
Richard M
8
Pouvez-vous mettre à jour ce post et comparer avec Ion-Auth (dérivé de dx-auth)? Il semble que l'ion-auth soit plus à jour et actif que l'authentification de réservoir à ce stade. Je veux savoir du point de vue de la sécurité si c'est aussi bon que Tank-auth ou non, car il a des fonctionnalités supplémentaires qui pourraient être utiles.
Vijay
1
Toutes ces bibliothèques utilisent mysql .. cependant j'utilise MongoDb qui est une base de données noSql. Existe-t-il une bibliothèque qui fonctionne avec MoongoDB? J'ai essayé de convertir une des bibliothèques ci-dessus pour l'insérer dans MongoDB au lieu de MySql mais cela devient trop complexe et j'aimerais connaître une bibliothèque qui le fait déjà
Ninja
2
@Lykos: Bien sûr - Les données utilisateur seraient des données spécifiques à l'authentification telles que UserID, UserName, Email, PasswordHash, LastLoginTime, etc. Les données de profil devraient être stockées dans une table DB distincte et pourraient être n'importe quoi, selon l'application spécifique. Cela pourrait inclure des choses comme l'anniversaire, le sexe, la ville natale, le score de réputation, etc. De cette façon, les développeurs d'applications peuvent modifier la table ProfileData comme ils le souhaitent, sans avoir à se soucier de la rupture soudaine du système d'authentification.
Jens Roland
58

Notez que la "liste complète" de Jens Roland n'inclut pas les rôles d'utilisateur. Si vous souhaitez attribuer différents rôles d'utilisateur (comme admin / utilisateur ou admin / éditeur / utilisateur), ces bibliothèques le permettent:

  • Ion_Auth (réécriture de Redux)
  • Redux
  • Backend Pro

Tank_Auth (n ° 1 ci-dessus dans la liste de Jens) n'a pas de rôle d'utilisateur. Je me rends compte que cela ne fait pas exactement partie de l'authentification, mais depuis

  • l'authentification et la gestion des rôles sont toutes deux gérées lors du chargement de la page
  • Les deux impliquent la sécurité
  • Le même tableau / modèle peut être utilisé pour les deux.
  • Les deux peuvent être configurés pour charger dans le constructeur du contrôleur (ou même charger automatiquement)

Cela fait beaucoup de sens d'avoir une bibliothèque pour gérer les deux, si vous en avez besoin. Je passe à Ion_Auth de Tank_Auth à cause de cela.

Burton Kent
la source
Ah, voyez, c'est vraiment bon à savoir - agréable d'avoir tous les aspects dans une bibliothèque, tout reste simple et fonctionnel. Devra se pencher sur Ion_Auth juste pour cette raison! Merci Burton!
Edd Twilbeck
4
C'est un bon point, bien sûr, et la gestion des rôles (autorisation en général) est un élément central de nombreux sites, étroitement lié au système d'authentification. Je choisirai tout de même un système d'authentification sécurisé avec une gestion des rôles simpliste ou inexistante plutôt qu'un système d'authentification vulnérable avec une gestion des rôles intégrée avancée.
Jens Roland
Ion_Auth fonctionne parfaitement avec CI 2.1 et DataMapper ORM
user482594
37

Ion_auth! Semble très prometteur et peu encombrant! J'aime..

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

Marko
la source
Ion Auth fonctionne bien pour moi aussi, a tout ce dont j'ai besoin et rien que je n'ai pas (comme des questions secrètes et autres).
SolidSmile
1
Ion Auth ressemble au leader actuel en termes d'utilisation, de fonctionnalités et de légèreté.
pbreitenbach
5
J'ai essayé à la fois Tank Auth et Ion Auth et je peux dire que le code Tank Auth est beaucoup plus propre, plus facile à comprendre et à étendre que Ion Auth. D'un autre côté, Ion Auth prend en charge les «rôles».
Jonathan
30

Je suis le développeur de Redux Auth et certains des problèmes que vous avez mentionnés ont été corrigés dans la version 2 bêta. Vous pouvez également le télécharger sur le site Web officiel avec un exemple d'application.

  • Nécessite un chargement automatique (entrave aux performances)
  • Utilise le concept intrinsèquement dangereux de «questions de sécurité». Dealbreaker!

Les questions de sécurité ne sont plus utilisées et un système de mot de passe oublié plus simple a été mis en place.

  • Les types de retour sont un peu un méli-mélo de codes vrai, faux, d'erreur et de réussite

Ce problème a été corrigé dans la version 2 et renvoie des valeurs booléennes. Je détestais le méli-mélo autant que vous.

  • Ne se connecte pas au système de validation de CI

L'exemple d'application utilise le système de validation du CI.

  • Ne permet pas à un utilisateur de renvoyer un code de «mot de passe perdu»

Travail en cours

J'ai également implémenté d'autres fonctionnalités telles que les vues par e-mail, cela vous donne le choix de pouvoir utiliser les assistants CodeIgniter dans vos e-mails.

C'est toujours un travail en cours, donc si vous avez d'autres suggestions, n'hésitez pas à les faire venir.

-Pop corn

Ps: Merci d'avoir recommandé Redux.

Svish
la source
1
Oh salut Mathew - et merci d'avoir pris le temps de répondre à mon message. La bêta semble très intéressante - comme je suis sûr que vous l'avez remarqué, Redux est déjà venu le plus près de bien faire les choses dans mon tour d'horizon, donc je vais y regarder tout de suite.
Jens Roland
Je viens de jeter un rapide coup d'œil au fil de discussion du CI Forum et à la feuille de route. En regardant bien - en ce qui concerne les sels «dynamiques», je recommande de concaténer (date de rég.). (clé de hachage du fichier de configuration). (code ou mot de passe) pour déjouer les tables arc-en-ciel et la force brute sur une base de données volée
Jens Roland
En outre, j'ai quelques réflexions sur les meilleures pratiques d'authentification ( stackoverflow.com/questions/549/… ) et la limitation du botnet ( stackoverflow.com/questions/479233/… ) que vous voudrez peut-être dépasser
Jens Roland
14

J'ai rencontré Flexi Auth ( http://haseydesign.com/flexi-auth/ ). Cela semble très prometteur et j'ai commencé à l'utiliser. Il a des fonctionnalités merveilleuses. S'intègre entièrement avec CI et est livré avec deux fichiers de bibliothèque différents, dont l'un est très lourd avec toutes les fonctions et l'autre ne contient que les validations.

L'un des meilleurs est que le membre nouvellement inscrit obtient un accès temporaire pour une durée donnée sur le site, jusqu'à ce qu'il clique sur le lien de son e-mail et l'active.

Suthan Bala
la source
Merci pour ce lien. Il a également une autre bonne fonctionnalité Flexi Cart haseydesign.com/flexi-cart .
Vir
13

Peut-être que vous trouveriez Redux adapté à vos besoins. Ce n'est pas exagéré et est livré uniquement avec des fonctionnalités nues que la plupart d'entre nous auraient besoin. Le développeur et les contributeurs ont été très stricts sur le code qui a été contribué.

Ceci est la page officielle

Filip Dupanović
la source
1
la version actuelle prend-elle en charge la dernière version de Code Igniter? Il semble qu'il n'y ait pas eu de mise à jour depuis très longtemps. Sinon j'aime ça.
GavinR
J'utilise Redux avec la dernière version de CI dans un site de production. Il est très léger, tout comme CI et très personnalisable.
GloryFish
1
Redux est plus maintenu, voir cette discussion. codeigniter.com/forums/viewthread/145342
Le développeur de pixels
Ion Auth est basé sur Redux Auth 2, et c'est celui que j'utiliserais. PyroCMS l'utilise également. github.com/benedmunds/CodeIgniter-Ion-Auth
Robert Audi
8

Ion_Auth bat tank_auth principalement pour deux raisons, les rôles utilisateurs et la documentation, ces deux sont absents de tank_auth.

nedu
la source
6

J'utilise une version personnalisée de DX Auth . Je l'ai trouvé simple à utiliser, extrêmement facile à modifier et il a un guide d'utilisation (avec de bons exemples) qui est très similaire à celui de Code Igniter.

Jelani Harris
la source
4

Jetez également un œil à BackendPro

En fin de compte, vous finirez probablement par écrire quelque chose de personnalisé, mais il n'y a rien de mal à emprunter les concepts de DX Auth, Freak Auth, BackendPro, etc.

Mon expérience avec les applications packagées est qu'elles sont spécifiques à certaines structures et j'ai eu des problèmes pour les intégrer dans mes propres applications sans nécessiter de piratage, puis si le pré-package a une mise à jour, je dois les migrer.

J'utilise également Smarty et ADOdb dans mon code CI, donc peu importe ce que je finirais toujours par faire des changements de code majeurs.

Adam
la source
3

Tank Auth a l'air bien, mais la documentation n'est qu'une explication d'une page sur la façon d'installer, ainsi qu'une rapide analyse de chaque fichier PHP. Du moins, c'est tout ce que j'ai trouvé après beaucoup de recherches sur Google. Peut-être que ce que les gens veulent dire ci-dessus quand ils disent que Tank Auth est bien documenté, c'est que le code est bien commenté. C'est une bonne chose, mais différente de la documentation. Il aurait été bien d'avoir de la documentation sur la façon d'intégrer les fonctionnalités de Tank Auth avec votre code existant.

user1284303
la source
3

J'essaie Ion_Auth et je l'apprécie, btw ...

SimpleLoginSecure Rend l'authentification simple et sécurisée.

Fabiano Shark
la source