Come devo scegliere una libreria di autenticazione per CodeIgniter? [chiuso]


398

Vedo che ce ne sono alcuni . Quali sono mantenuti e facili da usare? Quali sono i loro pro e contro?


8
Se sei ancora interessato, guarda Tank Auth. Ho appena aggiornato il mio post qui sotto dopo averlo esaminato, ed è eccellente.
Jens Roland,

7
Grazie per l'aggiornamento! Queste saranno informazioni preziose per i visitatori di questa domanda in futuro, quindi ho modificato la risposta accettata.
GavinR,

3
Perché l'improvvisa chiusura? Sembra adattarsi molto bene alle sei linee guida soggettive delle domande.
Brian Ortiz,

3
Nominato per la riapertura. Ho risposto perfettamente a una domanda che avevo (quali sistemi di autenticazione in CI vale la pena guardare) perfettamente.
Cruachan,

3
Concordato con @BrianOrtiz e Cruachan: perché chiudere? Bella domanda e grandi risposte.
Peter K.,

Risposte:


465

Aggiornamento (14 maggio 2010):

Si scopre che lo sviluppatore russo Ilya Konyukhov ha raccolto il guanto dopo averlo letto e ha creato una nuova libreria di autenticazione per CI basata su DX Auth, seguendo le raccomandazioni e i requisiti di seguito.

E il conseguente Tank Auth sembra la risposta alla domanda del PO. Ho intenzione di uscire su un arto qui e chiamare Tank Auth la migliore libreria di autenticazione per CodeIgniter disponibile oggi. È una libreria solida come una roccia che ha tutte le funzionalità di cui hai bisogno e nessuna delle gonfie che non hai:

Tank Auth

Professionisti

  • Pieno di funzionalità
  • Ingombro ridotto (20 file) considerando il set di funzionalità
  • Ottima documentazione
  • Progettazione di database semplice ed elegante (solo 4 tabelle DB)
  • La maggior parte delle funzionalità sono opzionali e facilmente configurabili
  • Supporto per file di lingua
  • reCAPTCHA supportato
  • Si collega al sistema di validazione di CI
  • Email di attivazione
  • Accedi con e-mail, nome utente o entrambi (configurabile)
  • Gli account non attivati ​​scadono automaticamente
  • Gestione degli errori semplice ma efficace
  • Utilizza phpass per l'hashing (e esegue anche l'hashing dei codici di accesso automatico nel DB)
  • Non usa domande di sicurezza
  • La separazione dei dati dell'utente e del profilo è molto piacevole
  • Modello di sicurezza molto ragionevole attorno ai tentativi di accesso non riusciti (buona protezione contro bot e attacchi DoS)

(Minori) Contro

  • I codici password persi non vengono sottoposti a hash nel DB
  • Include un CAPTCHA nativo (scarso), che è utile per coloro che non vogliono dipendere dal servizio reCAPTCHA (di proprietà di Google), ma in realtà non è abbastanza sicuro
  • Documentazione online molto scarsa (problema minore qui, poiché il codice è ben documentato e intuitivo)

Scarica Tank Auth qui


Risposta originale:

Ho implementato anche il mio (attualmente circa l'80% ha fatto dopo alcune settimane di lavoro). Prima ho provato tutti gli altri; FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered e pochi altri. Nessuno di loro era all'altezza, IMO, o mancavano delle funzionalità di base, intrinsecamente insicure o troppo gonfie per i miei gusti.

In realtà, ho fatto un riepilogo dettagliato di tutte le librerie di autenticazione per CodeIgniter mentre le stavo testando (subito dopo il capodanno). FWIW, lo condividerò con te:

DX Auth

Professionisti

  • Molto ricco di funzionalità
  • Ingombro medio (oltre 25 file), ma riesce a sembrare abbastanza magro
  • Ottima documentazione, anche se alcuni sono in inglese leggermente rotto
  • Supporto per file di lingua
  • reCAPTCHA supportato
  • Si collega al sistema di validazione di CI
  • Email di attivazione
  • Gli account non attivati ​​scadono automaticamente
  • Suggerisce grc.com per i sali (non male per un PRNG)
  • Esclusione con stringhe di "motivi" memorizzate
  • Gestione degli errori semplice ma efficace

Contro

  • Consente solo agli utenti di "reimpostare" una password persa (anziché lasciarli scegliere una nuova al momento della riattivazione)
  • Modello di pseudo-evento homebrew - buona intenzione, ma manca il segno
  • Due campi password nella tabella utente, stile errato
  • Utilizza due tabelle utente separate (una per gli utenti "temporanei": ambigua e ridondante)
  • Utilizza hashing md5 potenzialmente non sicuro
  • Tentativi di accesso non riusciti memorizzati solo dall'IP, non dal nome utente - non sicuro!
  • Chiave di accesso automatico non hash nel database - praticamente non sicura come la memorizzazione di password in chiaro!
  • Il sistema di ruolo è un disastro completo: funzione is_admin con nomi di ruoli codificati, is_role un disastro completo, check_uri_permissions è un disastro, l'intera tabella delle autorizzazioni è una cattiva idea (un URI può cambiare e rendere le pagine non protette; le autorizzazioni devono sempre essere archiviate esattamente dove si trova la logica sensibile). Dealbreaker!
  • Include un CAPTCHA nativo (scarso)
  • L'interfaccia della funzione reCAPTCHA è disordinata

FreakAuth Light

Professionisti

  • Molto ricco di funzionalità
  • Principalmente codice abbastanza ben documentato
  • La separazione dei dati dell'utente e del profilo è un bel tocco
  • Si collega al sistema di validazione di CI
  • Email di attivazione
  • Supporto per file di lingua
  • Sviluppato attivamente

Contro

  • Sembra un po 'gonfio (oltre 50 file)
  • Eppure manca l'accesso automatico ai cookie (!)
  • Non supporta gli accessi con nome utente ed e-mail
  • Sembra avere problemi con i caratteri UTF-8
  • Richiede molto caricamento automatico (impedendo le prestazioni)
  • File di configurazione mal gestito
  • Terribile separazione del View-Controller, con molta logica di programma nelle viste e output hardcoded nei controller. Dealbreaker!
  • Codice HTML scadente nelle viste incluse
  • Include CAPTCHA scadente
  • Il debug commentato echeggia ovunque
  • Forza una struttura di cartelle specifica
  • Forza una libreria Ajax specifica (può essere cambiata, ma non dovrebbe essere lì in primo luogo)
  • Nessun limite massimo per i tentativi di accesso - MOLTO pericoloso! Dealbreaker!
  • Convalida del modulo Hijacks
  • Utilizza hashing md5 potenzialmente non sicuro

pc_user

Professionisti

  • Buone funzionalità per il suo ingombro ridotto
  • Leggero, non gonfio (3 file)
  • Elegante accesso automatico ai cookie
  • Viene fornito con implementazione di test opzionale (bel tocco)

Contro

  • Utilizza la vecchia sintassi del database CI (meno sicura)
  • Non si aggancia al sistema di validazione di CI
  • Sistema di stato (ruolo) non intuitivo (indici sottosopra - impraticabile)
  • Utilizza l'hash sha1 potenzialmente non sicuro

Fresh Powered

Professionisti

  • Ingombro ridotto (6 file)

Contro

  • Manca molte funzionalità essenziali. Dealbreaker!
  • Tutto è hard-coded. Dealbreaker!

Redux / Ion Auth

Secondo la wiki di CodeIgniter , Redux è stato sospeso, ma il fork di Ion Auth sta andando forte: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth è una libreria ben descritta senza essere eccessivamente pesante o poco avanzata. Nella maggior parte dei casi il suo set di funzionalità soddisferà più i requisiti di un progetto.

Professionisti

  • Leggero e semplice da integrare con CodeIgniter
  • Supporta l'invio di e-mail direttamente dalla libreria
  • Online ben documentato e buona comunità di sviluppatori / utenti attivi
  • Semplice da implementare in un progetto

Contro

  • Schema DB più complesso di alcuni altri
  • La documentazione manca di dettagli in alcune aree

SimpleLoginSecure

Professionisti

  • Minimo footprint (4 file)
  • Minimalista, assolutamente senza gonfia
  • Utilizza phpass per l'hashing (eccellente)

Contro

  • Effettua l'accesso, il logout, la creazione e l'eliminazione
  • Manca molte funzionalità essenziali. Dealbreaker!
  • Più di un punto di partenza che di una biblioteca

Non fraintendetemi: non intendo mancare di rispetto a nessuna delle librerie di cui sopra; Sono molto impressionato da ciò che i loro sviluppatori hanno realizzato e da quanto lontano sono arrivati, e non sto esagerando nel riutilizzare parte del loro codice per creare il mio. Quello che sto dicendo è che, a volte in questi progetti, l'attenzione si sposta dagli essenziali "bisogni" (come le pratiche di sicurezza difficili) a quelli più "delicati", ed è quello che spero di rimediare .

Pertanto: ritorno alle origini.

Autenticazione per CodeIgniter eseguita correttamente

Ecco il mio elenco minimo di funzionalità richieste da una libreria di autenticazione. Capita anche di essere un sottoinsieme dell'elenco delle funzionalità della mia libreria;)

  1. Minimo ingombro con implementazione del test opzionale
  2. Documentazione completa
  3. Non è necessario il caricamento automatico. Caricamento just-in-time delle librerie per le prestazioni
  4. Supporto per file di lingua; nessuna stringa codificata
  5. reCAPTCHA supportato ma facoltativo
  6. Generazione di sale casuale TRUE consigliata (ad es. Utilizzando random.org o random.irb.hr)
  7. Componenti aggiuntivi opzionali per supportare l'accesso di terze parti (OpenID, Facebook Connect, account Google, ecc.)
  8. Accedi utilizzando il nome utente o l'e-mail
  9. Separazione dei dati dell'utente e del profilo
  10. Email per attivazione e password perse
  11. Funzione di accesso automatico ai cookie
  12. Phpass configurabile per l'hashing (ovviamente correttamente salato!)
  13. Hashing di password
  14. Hashing dei codici di accesso automatico
  15. Hashing di codici password persi
  16. Si collega al sistema di validazione di CI
  17. NESSUNA domanda di sicurezza!
  18. Criteri di password avanzati applicati lato server, con validatore lato client (Javascript) opzionale
  19. Imponi il numero massimo di tentativi di accesso falliti con le contromisure MIGLIORI PRATICHE contro gli attacchi del dizionario e DoS!
  20. Tutti gli accessi al database vengono effettuati tramite istruzioni preparate (associate)!

Nota: questi ultimi punti non sono un sovraccarico di altissima sicurezza che non è necessario per la tua applicazione web. Se una libreria di autenticazione non soddisfa questi standard di sicurezza al 100%, NON UTILIZZARLA!

Recenti esempi di alto profilo di programmatori irresponsabili che li hanno esclusi dal loro software: # 17 è il modo in cui l'e-mail AOL di Sarah Palin è stata hackerata durante la campagna presidenziale; una brutta combinazione di n. 18 e n. 19 sono stati i colpevoli di recente quando gli account Twitter di Britney Spears, Barack Obama, Fox News e altri sono stati hackerati; e il solo numero 20 è il modo in cui gli hacker cinesi sono riusciti a rubare 9 milioni di elementi di informazioni personali da oltre 70.000 siti web coreani in un attacco automatizzato nel 2008.

Questi attacchi non sono un intervento chirurgico al cervello. Se lasci le porte posteriori spalancate, non dovresti illuderti in un falso senso di sicurezza sbattendo la parte anteriore. Inoltre, se sei abbastanza serio sulla codifica per scegliere un framework di best practice come CodeIgniter, devi a te stesso almeno fare le giuste misure di sicurezza di base .


<Rant>

Fondamentalmente, ecco com'è: non mi interessa se una libreria di autenticazione offre un sacco di funzionalità, gestione avanzata dei ruoli, compatibilità PHP4, caratteri piuttosto CAPTCHA, tabelle di paesi, pannelli amministrativi completi, campane e fischietti - se la libreria effettivamente fa il mio sito è meno sicuro non seguendo le migliori pratiche. È un pacchetto di autenticazione ; deve fare UNA cosa giusta: l'autenticazione. Se non riesce a farlo , che , in realtà è fare più male che bene.

</ Rant>

/ Jens Roland


1
Ci sto ancora lavorando, ho riscontrato un brutto problema di architettura e ho dovuto scegliere tra l'hacking insieme una soluzione rapida (che avrebbe funzionato bene ma che soffrirebbe di un accoppiamento stretto), oppure sedersi e riflettere intensamente su come farlo nel modo giusto . Ho scelto quest'ultima opzione e non l'ho ancora decifrata: D
Jens Roland l'

2
Jens, potresti voler guardare Tank Auth che sembra essere stato creato in risposta al tuo (eccellente) post: codeigniter.com/forums/viewthread/110993
Richard M

8
Puoi aggiornare questo post e confrontarlo con Ion-Auth (derivato da dx-auth)? Sembra che ion-auth sia più aggiornato e attivo di Tank-auth in questo momento. Voglio sapere dal punto di vista della sicurezza se è buono come Tank-auth o meno, perché ha alcune funzionalità aggiuntive che potrebbero essere utili.
Vijay,

1
Tutte queste librerie usano mysql .. tuttavia io uso MongoDb che è un database noSql. Esiste una libreria che funziona con MoongoDB? Ho provato a convertire una delle librerie sopra per inserirla in MongoDB invece di MySql, ma sta diventando troppo complessa e vorrei conoscere una libreria che già lo fa
Ninja

2
@Lykos: Sicuro - I dati dell'utente sarebbero dati specifici dell'autent come UserID, UserName, Email, PasswordHash, LastLoginTime, ecc. I dati del profilo dovrebbero essere archiviati in una tabella DB separata e potrebbero essere qualsiasi cosa, a seconda dell'applicazione specifica. Ciò potrebbe includere cose come compleanno, sesso, città natale, punteggio di reputazione, ecc. In questo modo, gli sviluppatori di applicazioni possono modificare la tabella ProfileData in qualsiasi modo a loro piacimento, senza doversi preoccupare che il sistema di autenticazione si rompa improvvisamente.
Jens Roland,

58

La "lista completa" di Jens Roland non include i ruoli utente. Se sei interessato ad assegnare ruoli utente diversi (come admin / user o admin / editor / user), queste librerie lo consentono:

  • Ion_Auth (riscrittura di Redux)
  • Redux
  • Backend Pro

Tank_Auth (n. 1 sopra nell'elenco di Jens) non ha ruoli utente. Mi rendo conto che non fa esattamente parte dell'autenticazione, ma da allora

  • l'autenticazione e la gestione dei ruoli sono entrambe gestite al caricamento della pagina
  • Entrambi implicano sicurezza
  • Lo stesso tavolo / modello può essere utilizzato per entrambi.
  • Entrambi possono essere impostati per il caricamento nel costruttore del controller (o anche il caricamento automatico)

Ha molto senso avere una libreria per gestire entrambi, se ne hai bisogno. Sto passando a Ion_Auth da Tank_Auth per questo.


Ah, vedi, è davvero bello da sapere - bello avere tutti gli aspetti in una libreria, tutto è semplice e funzionale. Dovrà esaminare Ion_Auth solo per questo motivo! Grazie Burton!
Edd Twilbeck,

4
Questo è un buon punto, ovviamente, e la gestione dei ruoli (autorizzazione in generale) è parte centrale di molti siti, strettamente legata al sistema di autenticazione. Tuttavia, sceglierò un sistema di autenticazione sicuro con una gestione dei ruoli semplicistica o inesistente rispetto a un sistema di autenticazione vulnerabile con una gestione dei ruoli integrata avanzata ogni giorno.
Jens Roland,

Ion_Auth funziona perfettamente con CI 2.1 e DataMapper ORM
user482594

37

Ion_auth! Sembra molto promettente e di dimensioni ridotte! Mi piace..

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


Ion Auth funziona bene anche per me, ha tutto ciò di cui ho bisogno e niente che non lo faccio (come domande segrete e simili).
SolidSmile,

1
Ion Auth sembra l'attuale leader in termini di utilizzo, funzionalità e leggerezza.
pbreitenbach,

5
Ho provato sia Tank Auth che Ion Auth e posso dire che il codice Tank Auth è molto più pulito, più facile da capire e più facile da estendere di Ion Auth. Dall'altro lato Ion Auth supporta i "ruoli".
Jonathan,

30

Sono lo sviluppatore di Redux Auth e alcuni dei problemi menzionati sono stati risolti nella versione 2 beta. Puoi scaricarlo dal sito Web ufficiale con un'applicazione di esempio.

  • Richiede il caricamento automatico (impedendo le prestazioni)
  • Utilizza il concetto intrinsecamente pericoloso di "domande sulla sicurezza". Dealbreaker!

Le domande di sicurezza non vengono ora utilizzate ed è stato creato un sistema di password dimenticata più semplice.

  • I tipi restituiti sono un po 'un miscuglio di codici true, false, error e success

Questo problema è stato risolto nella versione 2 e restituisce valori booleani. Ho odiato l'hodgepodge tanto quanto te.

  • Non si aggancia al sistema di validazione di CI

L'applicazione di esempio utilizza il sistema di convalida dell'elemento della configurazione.

  • Non consente a un utente di inviare nuovamente un codice "password dimenticata"

Lavori in corso

Ho anche implementato alcune altre funzionalità come le visualizzazioni e-mail, questo ti dà la possibilità di poter utilizzare gli helper CodeIgniter nelle tue e-mail.

È ancora in fase di elaborazione, quindi se hai altri suggerimenti ti preghiamo di farli arrivare.

-Popcorn

Ps: Grazie per aver consigliato Redux.


1
Oh ciao Mathew - e grazie per aver dedicato del tempo a rispondere al mio post. La beta sembra molto interessante - come sono certo che hai notato, Redux si è già avvicinato di più a tutto nel mio round-up, quindi lo esaminerò subito.
Jens Roland,

Ho appena dato una rapida occhiata al thread del forum CI e alla roadmap. Sembra buono - rispetto ai sali "dinamici", consiglio di concatenare (data di registrazione). (chiave hash del file di configurazione). (codice o password) per contrastare le tabelle arcobaleno e la forza bruta su un database rubato
Jens Roland,

Inoltre, ho alcune considerazioni sulle migliori pratiche di autenticazione ( stackoverflow.com/questions/549/… ) e sulla limitazione delle botnet ( stackoverflow.com/questions/479233/… ) che potresti voler esaminare
Jens Roland,

14

Mi sono imbattuto in Flexi Auth ( http://haseydesign.com/flexi-auth/ ). Sembra molto promettente e ho iniziato a usarlo. Ha le caratteristiche di wonderfful. Si integra completamente con CI e viene fornito con due diversi file di libreria, in cui uno è molto pesante con tutte le funzioni e l'altro contiene solo le convalide.

Uno dei migliori è che il nuovo membro registrato abbia accesso temporaneo per un determinato periodo di tempo sul sito, fino a quando non fa clic sul collegamento dalla sua e-mail e si attiva.


Grazie per questo link Ha anche un'altra buona funzionalità Flexi Cart haseydesign.com/flexi-cart .
Vir

13

Forse troverai Redux adatto alle tue esigenze. Non è eccessivo e viene fornito solo con funzionalità nude che la maggior parte di noi richiederebbe. Lo sviluppatore e i collaboratori sono stati molto severi su quale codice è stato fornito.

Questa è la pagina ufficiale


1
la versione corrente supporta l'ultima versione di Code Igniter? Sembra che non ci sia stato un aggiornamento da molto tempo. Altrimenti mi piace.
GavinR,

Sto usando Redux con l'ultima versione di CI in un sito di produzione. È molto leggero, proprio come CI e molto personalizzabile.
GloryFish,

1
Redux è più mantenuto, vedere questa discussione. codeigniter.com/forums/viewthread/145342
The Pixel Developer

Ion Auth è basato su Redux Auth 2, ed è quello che vorrei usare. Anche PyroCMS lo usa. github.com/benedmunds/CodeIgniter-Ion-Auth
Robert Audi

8

Ion_Auth batte tank_auth principalmente per due motivi, ruoli utente e documentazione, questi due mancano da tank_auth.



4

Dai un'occhiata anche a BackendPro

Alla fine probabilmente finirai per scrivere qualcosa di personalizzato, ma non c'è niente di sbagliato nel prendere in prestito concetti da DX Auth, Freak Auth, BackendPro, ecc.

La mia esperienza con le app in pacchetto è che sono specifiche per determinate strutture e ho avuto problemi a integrarle nelle mie applicazioni senza richiedere hack, quindi se il pre-pacchetto ha un aggiornamento, devo migrarle.

Uso anche Smarty e ADOdb nel mio codice CI, quindi, indipendentemente da ciò che farei sempre apportando importanti modifiche al codice.


3

Tank Auth ha un bell'aspetto ma la documentazione è solo una spiegazione di una pagina su come installare, oltre a una rapida analisi di ogni file PHP. Almeno questo è tutto ciò che ho trovato dopo un sacco di ricerche su Google. Forse ciò che la gente intende sopra quando affermano che Tank Auth è ben documentato è che il codice è ben commentato. Questa è una buona cosa, ma diversa dalla documentazione. Sarebbe stato bello avere della documentazione su come integrare le funzionalità di Tank Auth con il tuo codice esistente.


3

Sto provando Ion_Auth e lo apprezzo, tra ...

SimpleLoginSecure Rende l'autenticazione semplice e sicura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.