web-dev-qa-db-fra.com

Comment choisir une bibliothèque d'authentification pour CodeIgniter?

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

390
GavinR

Mise à jour (14 mai 2010):

Il s'avère que le développeur russe Ilya Konyukhov a relevé le défi après avoir lu ceci et a créé une nouvelle bibliothèque d'authentification pour CI basée sur DX Auth, conformément aux recommandations et aux exigences ci-dessous.

Et le résultat Tank Auth ressemble à la réponse à la question du PO. Je vais me lancer et appeler Tank Auth, la meilleure bibliothèque d'authentification pour CodeIgniter disponible à ce jour. C'est une bibliothèque solide comme le roc qui a toutes les fonctionnalités dont vous avez besoin et aucune des choses que vous ne faites pas:

Tank Auth

Avantages

  • Complet vedette
  • Empreinte maigre (20 fichiers) en considérant l'ensemble des fonctionnalités
  • Très bonne documentation
  • Conception de base de données simple et élégante (seulement 4 tables de base de données)
  • La plupart des fonctionnalités sont optionnelles et faciles à configurer
  • Support de fichier de langue
  • reCAPTCHA supporté
  • S'accroche au système de validation de CI
  • Email d'activation
  • Connexion avec email, nom d'utilisateur ou les deux (configurable)
  • Les comptes non activés expirent automatiquement
  • Traitement des erreurs simple mais efficace
  • Utilise phpass pour le hachage (et hache également les codes de connexion automatique dans la base de données)
  • N'utilise pas de questions de sécurité
  • La séparation des données utilisateur et profil est très agréable
  • Modèle de sécurité très raisonnable autour des tentatives de connexion infructueuses (bonne protection contre les bots et les attaques par déni de service)

(Mineure) Inconvénients

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

Télécharger Tank Auth here


Réponse originale:

J'ai également mis en place le mien (environ 80% du travail est terminé après quelques semaines de travail). J'ai d'abord essayé tous les autres. FreakAuth Light, Autorisation DX, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered, et quelques autres. Aucun d’entre eux n’était à la hauteur, IMO, soit ils manquaient de fonctionnalités de base, intrinsèquement INsecure, soit 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:

Autorisation DX

Avantages

  • Très complet en vedette
  • Empreinte moyenne (plus de 25 fichiers), mais parvient à se sentir assez mince
  • Excellente documentation, même si certains sont en anglais légèrement cassé
  • Support de fichier de langue
  • reCAPTCHA supporté
  • S'accroche au système de validation de CI
  • Email 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 'raison' stockées
  • Traitement des erreurs simple mais efficace

Les inconvénients

  • Permet uniquement aux utilisateurs de "réinitialiser" un mot de passe perdu (plutôt que de le laisser choisir un nouveau mot de passe lors de la réactivation)
  • Modèle de pseudo-événement Homebrew - bonne intention, mais manque la cible
  • Deux champs de mot de passe dans la table des utilisateurs, mauvais style
  • Utilise deux tables d'utilisateurs distinctes (une pour les utilisateurs "temporaires" - ambiguë et redondante)
  • Utilise un hachage md5 potentiellement dangereux
  • Les tentatives de connexion infructueuses sont enregistrées uniquement par IP, pas par nom d'utilisateur - non sécurisé!
  • Clé de connexion automatique non 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: fonction is_admin avec des noms de rôles codés en dur, is_role un gâchis complet, check_uri_permissions est un gâchis, tout le tableau des autorisations est une mauvaise idée (un URI peut changer et afficher des pages non protégées; les autorisations doivent toujours être stockées exactement où la logique sensible est). Dealbreaker!
  • Inclut un CAPTCHA natif (pauvre)
  • l'interface de fonction reCAPTCHA est désordonnée

FreakAuth Light

Avantages

  • Très complet en vedette
  • Code plutôt bien documenté
  • La séparation des données utilisateur et profil est une belle touche
  • S'accroche au système de validation de CI
  • Email d'activation
  • Support de fichier de langue
  • Activement développé

Les inconvénients

  • On se sent un peu ballonné (plus de 50 fichiers)
  • Et pourtant, il manque un identifiant de cookie automatique (!)
  • Ne supporte pas les connexions avec nom d'utilisateur et email
  • Semble avoir des problèmes avec les caractères UTF-8
  • Nécessite beaucoup de chargement automatique (performances gênantes)
  • Fichier de configuration mal géré
  • Séparation Terrible View-Controller, avec beaucoup de logique de programme dans les vues et une sortie codée en dur dans les contrôleurs. Dealbreaker!
  • Mauvais code HTML dans les vues incluses
  • Comprend des CAPTCHA de qualité inférieure
  • Des échos de débogage commentés partout
  • Force une structure de dossier spécifique
  • Force une bibliothèque Ajax spécifique (peut être changé, mais ne devrait pas être là en premier)
  • Pas de limite maximum de tentatives de connexion - TRES dangereux! Dealbreaker!
  • Validation du formulaire de détournement
  • Utilise un hachage md5 potentiellement dangereux

pc_user

Avantages

  • Bon ensemble de fonctionnalités pour son faible encombrement
  • Léger, pas de ballonnement (3 fichiers)
  • Connexion automatique élégante aux cookies
  • Livré avec une mise en œuvre de test optionnelle (Nice touch)

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 (de rôle) peu intuitif (index inversés - peu pratique)
  • Utilise un hachage sha1 potentiellement dangereux

Fresh Powered

Avantages

  • Faible encombrement (6 fichiers)

Les inconvénients

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

Autorisation Redux/Ion

Selon le wiki CodeIgniter , Redux a été arrêté, mais le fork Ion Auth est fort: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth est une bibliothèque riche en fonctionnalités, sans être trop lourde ni trop avancée. Dans la plupart des cas, son ensemble de fonctionnalités répondra davantage aux besoins d’un projet.

Avantages

  • Léger et simple à intégrer à CodeIgniter
  • Prend en charge l'envoi de courriels directement à partir de la bibliothèque
  • Bien documenté en ligne et bonne communauté active de développeurs/utilisateurs
  • Simple à implémenter dans un projet

Les inconvénients

  • Schéma de base de données plus complexe que d'autres
  • La documentation manque de détails dans certains domaines

SimpleLoginSecure

Avantages

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

Les inconvénients

  • Seulement vous connecter, vous déconnecter, créer et supprimer
  • 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 les réalisations de leurs développeurs et le chemin parcouru par chacun d'entre eux. Je ne suis pas au-dessus de la réutilisation de certains de leurs codes pour construire le mien. Ce que je dis, c’est que, parfois, dans ces projets, l’attention passe des "besoins essentiels" (tels que les pratiques de sécurité strictes) à des "plus douces", et c’est ce à quoi j’espère remédier .

Donc: retour aux sources.

Authentification pour CodeIgniter effectuée à droite

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

  1. Encombrement minime avec implémentation test optionnelle
  2. Documentation complète
  3. Aucun autoloading requis. Chargement juste à temps des bibliothèques pour la performance
  4. Support de fichier de langue; pas de chaînes codées en dur
  5. reCAPTCHA supporté mais optionnel
  6. VRAI génération de sel aléatoire recommandée (par exemple, en utilisant random.org ou random.irb.hr)
  7. Add-ons optionnels pour supporter la connexion à une tierce partie (OpenID, Facebook Connect, Compte Google, etc.)
  8. Se connecter avec un nom d'utilisateur ou un email
  9. Séparation des données utilisateur et 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 de codes de connexion automatique
  15. Hachage de codes de mot de passe perdus
  16. S'accroche au système de validation de CI
  17. AUCUNE question de sécurité!
  18. Stratégie de mot de passe fort appliquée côté serveur, avec validateur facultatif côté client (Javascript)
  19. Nombre maximal de tentatives de connexion infructueuses avec contre-mesures MEILLEURES PRATIQUES contre les attaques par dictionnaire et par déni de service!
  20. Tous les accès à la base de données effectués via des instructions préparées (liées)!

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

Des exemples récents et hautement médiatisés de codeurs irresponsables qui les ont laissés de côté de leur logiciel: voici comment 17 le courrier électronique AOL de Sarah Palin a été piraté pendant la campagne présidentielle; une mauvaise combinaison entre les numéros 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 le n ° 20 à lui seul explique comment les pirates chinois ont réussi à voler 9 millions d’informations personnelles à plus de 70 000 sites Web coréens en un seul piratage automatisé en 2008.

Ces attaques ne sont pas une opération du cerveau. Si vous laissez les portes de votre maison grandes ouvertes, vous ne devez pas vous leurrer dans un faux sentiment de sécurité en verrouillant l'avant. De plus, si vous êtes assez sérieux en matière de codage pour choisir un cadre de pratiques optimales tel que CodeIgniter, vous vous devez d’avoir au moins les mesures de sécurité de base les plus appropriées.


<rant>

En gros, voici comment cela se passe: Peu m'importe si une bibliothèque d'authentification offre un tas de fonctionnalités, une gestion avancée des rôles, la compatibilité PHP4, de jolies polices CAPTCHA, des tables de pays, une administration complète. panneaux, cloches et sifflets - si la bibliothèque rend réellement mon site moins sécurisé en ne suivant pas les meilleures pratiques. C'est un package d'authentification ; il ne faut qu’une seule chose: l’authentification. Si cela ne réussit pas cela , cela fait plus de mal que de bien.

</ rant>

/ Jens Roland

464
Jens Roland

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 (tels que admin/user ou admin/editor/user), ces bibliothèques l'autorisent:

  • 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 réalise que cela ne fait pas vraiment partie de l'authentification, mais depuis

  • l'authentification et la gestion des rôles sont toutes deux gérées au 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 se charger dans le constructeur du contrôleur (ou même pour le chargement automatique)

Il est logique de ne disposer que d’une seule bibliothèque pour gérer les deux, si vous en avez besoin. Je passe de Tank_Auth à Ion_Auth pour cette raison.

58
Burton Kent

Ion_auth! Semble très prometteur et faible encombrement! J'aime..

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

37
Marko

Je suis le développeur de Redux Auth et certains des problèmes que vous avez mentionnés ont été résolus 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 (performances gênantes)
  • 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élange de codes vrais, faux, d'erreur et de succès

Ce problème a été corrigé dans la version 2 et renvoie des valeurs booléennes. J'ai détesté 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"

Travaux en cours

J'ai également implémenté d'autres fonctionnalités telles que les affichages d'e-mails, ce qui vous permet d'utiliser les aides CodeIgniter dans vos emails.

C'est toujours un travail en cours, donc si vous avez d'autres suggestions, continuez.

-Pop corn

Ps: Merci d'avoir recommandé Redux.

30
Mathew

J'ai rencontré Flexi Auth ( http://haseydesign.com/flexi-auth/ ). Cela semble très prometteur et je commence à l'utiliser. Il a des caractéristiques merveilleuses. S'intègre complètement à CI et est livré avec deux fichiers de bibliothèque différents, dans lesquels l'un est chargé avec toutes les fonctions et l'autre ne contient que les validations.

L'un des meilleurs est que le membre nouvellement inscrit ait un accès temporaire pendant une durée donnée sur le site, jusqu'à ce qu'il clique sur le lien contenu dans son courrier électronique et l'active.

14
Suthan Bala

Peut-être que vous trouveriez Redux correspondant à vos besoins. Ce n'est pas une surdose et ne contient que des fonctionnalités nues dont la plupart d'entre nous auraient besoin. Le dev et les contributeurs étaient très stricts sur le code qui avait été ajouté.

Ceci est le page officielle

13
Filip Dupanović

Ion_Auth bat tank_auth principalement pour deux raisons, rôles d'utilisateur et documentation, ces deux éléments sont absents de tank_auth.

8
nedu

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

6
Jelani Harris

Regardez aussi BackendPro

En fin de compte, vous finirez probablement par écrire quelque chose de personnalisé, mais rien n’empêche d’emprunter des 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 que j'ai eu du mal à les intégrer dans mes propres applications sans avoir besoin de piratage. Si le pré-package contient une mise à jour, je dois les migrer.

J'utilise également Smarty et ADOdb dans mon code CI, donc peu importe ce que je ferais toujours pour apporter des modifications majeures au code.

4
Adam

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

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

3
Fabiano Shark

Tank Auth a l'air bien, mais la documentation ne contient qu'une explication d'une page sur la procédure d'installation, plus une description rapide de chaque fichier PHP. Au 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 plus haut 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é agréable de disposer d'une documentation sur la manière d'intégrer les fonctionnalités de Tank Auth à votre code existant.

3
user1284303