¿Cómo debo elegir una biblioteca de autenticación para CodeIgniter? [cerrado]

398

Veo que hay algunos . ¿Cuáles son mantenidos y fáciles de usar? ¿Cuáles son sus pros y sus contras?

GavinR
fuente
8
Si todavía está interesado, mire Tank Auth. Acabo de actualizar mi publicación a continuación después de revisarla, y es excelente.
Jens Roland
77
¡Gracias por la actualización! Esta será información valiosa para los visitantes de esta pregunta en el futuro, así que cambié la respuesta aceptada.
GavinR
3
¿Por qué el cierre repentino? Parece encajar muy bien con las seis pautas de preguntas subjetivas.
Brian Ortiz
3
Nominado para reapertura. Respondí una pregunta que tenía (qué sistemas de autenticación en CI vale la pena mirar) perfectamente.
Cruachan
3
De acuerdo con @BrianOrtiz y Cruachan: ¿Por qué cerrar? Buena pregunta y excelentes respuestas.
Peter K.

Respuestas:

465

Actualización (14 de mayo de 2010):

Resulta que el desarrollador ruso Ilya Konyukhov recogió el guante después de leer esto y creó una nueva biblioteca de autenticación para CI basada en DX Auth, siguiendo las recomendaciones y requisitos a continuación.

Y el Tank Auth resultante se parece a la respuesta a la pregunta del OP. Voy a arriesgarme aquí y llamar a Tank Auth la mejor biblioteca de autenticación para CodeIgniter disponible hoy. Es una biblioteca sólida como una roca que tiene todas las características que necesita y ninguna de las que no necesita:

Autenticación de tanque

Pros

  • Con todas las funciones
  • Huella magra (20 archivos) considerando el conjunto de características
  • Muy buena documentación
  • Diseño de base de datos simple y elegante (solo 4 tablas DB)
  • La mayoría de las funciones son opcionales y se configuran fácilmente
  • Soporte de archivos de idioma
  • reCAPTCHA compatible
  • Se conecta al sistema de validación de CI
  • Correos electrónicos de activación
  • Inicie sesión con correo electrónico, nombre de usuario o ambos (configurable)
  • Las cuentas no activadas caducan automáticamente
  • Manejo de errores simple pero efectivo
  • Utiliza phpass para hashing (y también códigos hash de inicio de sesión automático en la base de datos)
  • No utiliza preguntas de seguridad.
  • La separación de los datos de usuario y perfil es muy agradable.
  • Modelo de seguridad muy razonable en torno a intentos fallidos de inicio de sesión (buena protección contra bots y ataques DoS)

(Menor) Contras

  • Los códigos de contraseña perdidos no se codifican en DB
  • Incluye un CAPTCHA nativo (pobre), que es bueno para aquellos que no quieren depender del servicio reCAPTCHA (propiedad de Google), pero realmente no es lo suficientemente seguro
  • Documentación en línea muy escasa (problema menor aquí, ya que el código está muy bien documentado e intuitivo)

Descargue Tank Auth aquí


Respuesta original:

También he implementado el mío (actualmente aproximadamente el 80% lo hace después de algunas semanas de trabajo). Probé todos los demás primero; FreakAuth Light, DX Auth, Redux, SimpleLogin, SimpleLoginSecure, pc_user, Fresh Powered y algunos más. Ninguno de ellos estaba a la altura, en mi opinión, o carecían de características básicas, inherentemente inseguras o demasiado hinchadas para mi gusto.

En realidad, hice un resumen detallado de todas las bibliotecas de autenticación para CodeIgniter cuando las estaba probando (justo después de Año Nuevo). FWIW, lo compartiré contigo:

DX Auth

Pros

  • Muy completo
  • Huella mediana (más de 25 archivos), pero logra sentirse bastante delgada
  • Excelente documentación, aunque algunos están en inglés ligeramente roto
  • Soporte de archivos de idioma
  • reCAPTCHA compatible
  • Se conecta al sistema de validación de CI
  • Correos electrónicos de activación
  • Las cuentas no activadas caducan automáticamente
  • Sugiere grc.com para sales (no está mal para un PRNG)
  • Prohibición con cadenas de 'razones' almacenadas
  • Manejo de errores simple pero efectivo

Contras

  • Solo permite a los usuarios 'restablecer' una contraseña perdida (en lugar de permitirles elegir una nueva al reactivarla)
  • Modelo de pseudoeventos casero - buena intención, pero falla la marca
  • Dos campos de contraseña en la tabla de usuario, mal estilo
  • Utiliza dos tablas de usuario separadas (una para usuarios 'temporales': ambigua y redundante)
  • Utiliza hash md5 potencialmente inseguro
  • Los intentos fallidos de inicio de sesión solo se almacenan por IP, no por nombre de usuario, ¡inseguro!
  • La clave de inicio de sesión automático no está cifrada en la base de datos, ¡prácticamente tan insegura como almacenar contraseñas en texto sin cifrar!
  • El sistema de roles es un desastre completo: la función is_admin con nombres de roles codificados, is_role es un desastre completo, check_uri_permissions es un desastre, toda la tabla de permisos es una mala idea (un URI puede cambiar y hacer que las páginas no estén protegidas; los permisos siempre deben almacenarse exactamente donde está la lógica sensible). ¡Factor decisivo!
  • Incluye un CAPTCHA nativo (pobre)
  • La interfaz de la función reCAPTCHA es desordenada

FreakAuth Light

Pros

  • Muy completo
  • En su mayoría código bastante bien documentado
  • La separación de los datos de usuario y perfil es un buen toque
  • Se conecta al sistema de validación de CI
  • Correos electrónicos de activación
  • Soporte de archivos de idioma
  • Desarrollado activamente

Contras

  • Se siente un poco hinchado (más de 50 archivos)
  • Y sin embargo, carece de inicio de sesión automático de cookies (!)
  • No admite inicios de sesión con nombre de usuario y correo electrónico
  • Parece tener problemas con los caracteres UTF-8
  • Requiere mucha carga automática (lo que impide el rendimiento)
  • Archivo de configuración mal administrado
  • Terrible separación entre el controlador y la vista, con mucha lógica de programa en las vistas y salida codificada en los controladores. ¡Factor decisivo!
  • Mal código HTML en las vistas incluidas
  • Incluye CAPTCHA deficiente
  • La depuración comentada hace eco en todas partes
  • Fuerza una estructura de carpeta específica
  • Fuerza una biblioteca Ajax específica (se puede cambiar, pero no debería estar allí en primer lugar)
  • Sin límite máximo en los intentos de inicio de sesión, ¡MUY inseguro! ¡Factor decisivo!
  • Secuestro de validación de formulario
  • Utiliza hash md5 potencialmente inseguro

pc_user

Pros

  • Buen conjunto de características por su pequeña huella
  • Ligero, sin hinchazón (3 archivos)
  • Elegante inicio de sesión automático de cookies
  • Viene con implementación de prueba opcional (buen toque)

Contras

  • Utiliza la antigua sintaxis de la base de datos de CI (menos segura)
  • No se conecta al sistema de validación de CI
  • Sistema de estado (rol) poco intuitivo (índices al revés - poco práctico)
  • Utiliza hash sha1 potencialmente inseguro

Recién Alimentado

Pros

  • Tamaño reducido (6 archivos)

Contras

  • Carece de muchas características esenciales. ¡Factor decisivo!
  • Todo está codificado. ¡Factor decisivo!

Redux / Ion Auth

De acuerdo con la wiki de CodeIgniter , Redux ha sido descontinuado, pero la bifurcación de Ion Auth se está fortaleciendo: https://github.com/benedmunds/CodeIgniter-Ion-Auth

Ion Auth es una biblioteca bien presentada sin ser demasiado pesada o poco avanzada. En la mayoría de los casos, su conjunto de características satisfará con creces los requisitos de un proyecto.

Pros

  • Ligero y fácil de integrar con CodeIgniter
  • Admite el envío de correos electrónicos directamente desde la biblioteca
  • Bien documentado en línea y buena comunidad activa de desarrollo / usuario
  • Simple de implementar en un proyecto

Contras

  • Esquema de DB más complejo que otros.
  • La documentación carece de detalles en algunas áreas.

SimpleLoginSecure

Pros

  • Pequeña huella (4 archivos)
  • Minimalista, absolutamente sin hinchazón
  • Utiliza phpass para hashing (excelente)

Contras

  • Solo iniciar sesión, cerrar sesión, crear y eliminar
  • Carece de muchas características esenciales. ¡Factor decisivo!
  • Más punto de partida que una biblioteca

No me malinterpreten: no pretendo faltarle el respeto a ninguna de las bibliotecas anteriores; Estoy muy impresionado con lo que han logrado sus desarrolladores y qué tan lejos han llegado cada uno de ellos, y no estoy dispuesto a reutilizar parte de su código para construir el mío. Lo que digo es que, a veces en estos proyectos, el enfoque cambia de las necesidades esenciales (como las prácticas de seguridad estrictas) a las cosas más agradables, y eso es lo que espero remediar. .

Por lo tanto: volver a lo básico.

Autenticación para CodeIgniter bien hecha

Aquí está mi lista MINIMAL requerida de características de una biblioteca de autenticación. También resulta ser un subconjunto de la lista de características de mi propia biblioteca;)

  1. Tamaño reducido con implementación de prueba opcional
  2. Documentación completa
  3. No se requiere carga automática. Carga de bibliotecas justo a tiempo para el rendimiento
  4. Soporte de archivos de idioma; sin cadenas codificadas
  5. reCAPTCHA compatible pero opcional
  6. Generación de sal aleatoria VERDADERA recomendada (por ejemplo, usando random.org o random.irb.hr)
  7. Complementos opcionales para admitir el inicio de sesión de terceros (OpenID, Facebook Connect, cuenta de Google, etc.)
  8. Inicie sesión con nombre de usuario o correo electrónico
  9. Separación de datos de usuario y perfil.
  10. Correos electrónicos para activación y contraseñas perdidas
  11. Función automática de inicio de sesión de cookies
  12. Phpass configurable para hash (¡salado adecuadamente, por supuesto!)
  13. Hashing de contraseñas
  14. Hashing de códigos de inicio de sesión automático
  15. Hashing de códigos de contraseña perdidos
  16. Se conecta al sistema de validación de CI
  17. NO preguntas de seguridad!
  18. Política de contraseña segura implementada del lado del servidor, con el validador opcional del lado del cliente (Javascript)
  19. ¡Número máximo forzado de intentos fallidos de inicio de sesión con MEJORES PRÁCTICAS contramedidas contra los ataques de diccionario y DoS!
  20. ¡Todo el acceso a la base de datos se realiza mediante declaraciones preparadas (vinculadas)!

Nota: esos últimos puntos no son excesos de seguridad súper alta que no necesita para su aplicación web. Si una biblioteca de autenticación no cumple con estos estándares de seguridad al 100%, ¡NO LA USE!

Ejemplos recientes de alto perfil de codificadores irresponsables que los dejaron fuera de su software: # 17 es cómo el correo electrónico de Sarah Palin fue pirateado durante la campaña presidencial; una combinación desagradable de # 18 y # 19 fueron los culpables recientemente cuando las cuentas de Twitter de Britney Spears, Barack Obama, Fox News y otros fueron pirateadas; y solo el número 20 es cómo los piratas informáticos chinos lograron robar 9 millones de elementos de información personal de más de 70,000 sitios web coreanos en un hack automatizado en 2008.

Estos ataques no son cirugía cerebral. Si deja las puertas traseras abiertas de par en par, no debe engañarse con una falsa sensación de seguridad al atornillar la parte delantera. Además, si usted es lo suficientemente serio acerca de la codificación para elegir un marco de mejores prácticas como CodeIgniter, se lo debe a usted mismo al menos para obtener las medidas de seguridad más básicas bien hechas.


<rant>

Básicamente, así es como es: no me importa si una biblioteca de autenticación ofrece un montón de características, administración avanzada de roles, compatibilidad PHP4, bonitas fuentes CAPTCHA, tablas de países, paneles de administración completos, campanas y silbatos, si la biblioteca realmente hace mi sitio es menos seguro al no seguir las mejores prácticas. Es un paquete de autenticación ; necesita hacer UNA cosa bien: Autenticación. Si no logra hacer que , en realidad está haciendo más daño que bien.

</rant>

/ Jens Roland

Jens Roland
fuente
1
Todavía estoy en ello, me encontré con un desagradable problema de arquitectura y tuve que elegir entre hackear juntos una solución rápida (que funcionaría bien pero sufriría un acoplamiento estrecho), o sentarse y pensar mucho sobre cómo hacerlo bien . Elegí la última opción, y todavía no la he descifrado: D
Jens Roland
2
Jens, es posible que desee ver Tank Auth, que parece haber sido creado en respuesta a su (excelente) publicación: codeigniter.com/forums/viewthread/110993
Richard M
8
¿Puedes actualizar esta publicación y compararla con Ion-Auth (derivado de dx-auth)? Parece que la autenticación de iones está más actualizada y activa que la autenticación de tanque en este momento. Quiero saber desde una perspectiva de seguridad si es tan bueno como Tank-auth o no, porque tiene algunas características adicionales que podrían ser útiles.
Vijay
1
Todas estas bibliotecas usan mysql. Sin embargo, uso MongoDb, que es una base de datos noSql. ¿Hay una biblioteca que funcione con MoongoDB? Intenté convertir una de las bibliotecas anteriores para insertarla en MongoDB en lugar de MySql, pero se está volviendo demasiado compleja y me gustaría conocer una biblioteca que ya lo haga
Ninja
2
@Lykos: Claro: los datos del usuario serían datos específicos de autenticación, como ID de usuario, Nombre de usuario, Correo electrónico, PasswordHash, LastLoginTime, etc. Los datos del perfil deben almacenarse en una tabla de base de datos separada y pueden ser cualquier cosa, dependiendo de la aplicación específica. Esto podría incluir cosas como cumpleaños, género, ciudad natal, puntaje de reputación, etc. De esta manera, los desarrolladores de la aplicación pueden modificar la tabla ProfileData de la forma que deseen, sin tener que preocuparse de que el sistema de autenticación se rompa de repente.
Jens Roland
58

Tenga en cuenta que la "lista completa" de Jens Roland no incluye roles de usuario. Si está interesado en asignar diferentes roles de usuario (como admin / user o admin / editor / user), estas bibliotecas le permiten:

  • Ion_Auth (reescritura de Redux)
  • Redux
  • Backend Pro

Tank_Auth (# 1 arriba en la lista de Jens) no tiene roles de usuario. Me doy cuenta de que no es exactamente parte de la autenticación, pero desde

  • la autenticación y la gestión de roles se manejan al cargar la página
  • Ambos implican seguridad
  • Se puede usar la misma tabla / modelo para ambos.
  • Ambos se pueden configurar para cargar en el constructor del controlador (o incluso la carga automática)

Tiene mucho sentido tener una biblioteca para manejar ambas, si la necesita. Me estoy cambiando a Ion_Auth desde Tank_Auth debido a esto.

Burton Kent
fuente
Ah, mira, eso es realmente bueno saberlo: es bueno tener todos los aspectos en una biblioteca, lo mantiene todo simple y funcional. ¡Tendré que buscar en Ion_Auth solo por esa razón! Gracias Burton!
Edd Twilbeck
44
Ese es un buen punto, por supuesto, y la gestión de roles (autorización en general) es parte central de muchos sitios, estrechamente vinculada al sistema de autenticación. Aún así, elegiré un sistema de autenticación seguro con administración de roles simple o inexistente en lugar de un sistema de autenticación vulnerable con administración de roles incorporada avanzada cualquier día.
Jens Roland
Ion_Auth funciona bien con CI 2.1 y DataMapper ORM
user482594
37

Ion_auth! ¡Se ve muy prometedor y ocupa poco espacio! Me gusta..

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

Marko
fuente
Ion Auth también funciona bien para mí, tiene todo lo que necesito y nada que no (como preguntas secretas y me gusta).
SolidSmile
1
Ion Auth parece el líder actual en términos de uso, características y ligereza.
pbreitenbach el
55
He intentado tanto Tank Auth como Ion Auth y puedo decir que el código de Tank Auth es mucho más limpio, más fácil de entender y más fácil de extender que Ion Auth. Por otro lado, Ion Auth admite 'roles'.
Jonathan
30

Soy el desarrollador de Redux Auth y algunos de los problemas que mencionaste se han solucionado en la versión 2 beta. Puede descargar esto del sitio web oficial con una aplicación de muestra también.

  • Requiere carga automática (que impide el rendimiento)
  • Utiliza el concepto inherentemente inseguro de 'preguntas de seguridad'. ¡Factor decisivo!

Las preguntas de seguridad ahora no se usan y se ha implementado un sistema de contraseña olvidado más simple.

  • Los tipos de retorno son una mezcla de códigos de verdadero, falso, error y éxito

Esto se solucionó en la versión 2 y devuelve valores booleanos. Odiaba la mezcolanza tanto como tú.

  • No se conecta al sistema de validación de CI

La aplicación de muestra utiliza el sistema de validación de CI.

  • No permite que un usuario reenvíe un código de "contraseña perdida"

Trabajo en progreso

También implementé algunas otras características como las vistas de correo electrónico, esto le da la opción de poder usar los ayudantes de CodeIgniter en sus correos electrónicos.

Todavía es un trabajo en progreso, así que si tienes más sugerencias, sigue haciéndolo.

-Palomitas de maiz

PD: Gracias por recomendar Redux.

Svish
fuente
1
Ah, hola Mathew, y gracias por tomarte el tiempo de responder mi publicación La versión beta suena muy interesante, como estoy seguro de que notaron, Redux ya estuvo más cerca de hacerlo bien en mi resumen, así que lo investigaré de inmediato.
Jens Roland el
Acabo de echar un vistazo rápido al hilo del Foro CI y la hoja de ruta. Lucir bien: con respecto a las sales 'dinámicas', recomiendo concatenar (fecha de registro). (clave de hash del archivo de configuración). (código o contraseña) para frustrar las tablas del arco iris y la fuerza bruta en una base de datos robada
Jens Roland
Además, tengo algunas ideas sobre las mejores prácticas de autenticación ( stackoverflow.com/questions/549/… ) y la limitación de botnet ( stackoverflow.com/questions/479233/… ) que tal vez quiera atropellar
Jens Roland
14

Me he encontrado con Flexi Auth ( http://haseydesign.com/flexi-auth/ ). Se ve muy prometedor, y he comenzado a usarlo. Tiene características maravillosas. Se integra completamente con CI y viene con dos archivos de biblioteca diferentes, en los cuales uno está muy cargado con todas las funciones y el otro contiene solo las validaciones.

Una de las mejores es que el miembro recién registrado obtiene acceso temporal durante un período de tiempo determinado en el sitio, hasta que haga clic en el enlace de su correo electrónico y se active.

Suthan Bala
fuente
Gracias por este enlace. También tiene otra buena característica Flexi Cart haseydesign.com/flexi-cart .
Vir
13

Quizás encuentre Redux que satisfaga sus necesidades. No es excesivo y viene repleto de características básicas que la mayoría de nosotros necesitaríamos. El desarrollador y los colaboradores fueron muy estrictos sobre qué código se contribuyó.

Esta es la página oficial.

Filip Dupanović
fuente
1
¿La versión actual admite la última versión de Code Igniter? Parece que no ha habido una actualización en mucho tiempo. De lo contrario me gusta.
GavinR
Estoy usando Redux con la última versión de CI en un sitio de producción. Es muy ligero, al igual que CI y muy personalizable.
GloryFish
1
Redux se mantiene por más tiempo, vea esta discusión. codeigniter.com/forums/viewthread/145342
The Pixel Developer
Ion Auth se basa en Redux Auth 2, y es el que usaría. PyroCMS también lo usa. github.com/benedmunds/CodeIgniter-Ion-Auth
Robert Audi
8

Ion_Auth supera a tank_auth principalmente por dos razones, roles de usuario y documentación, estos dos faltan en tank_auth.

nedu
fuente
4

También eche un vistazo a BackendPro

En última instancia, probablemente terminarás escribiendo algo personalizado, pero no hay nada de malo en tomar prestados conceptos de DX Auth, Freak Auth, BackendPro, etc.

Mi experiencia con las aplicaciones empaquetadas es que son específicas de ciertas estructuras y he tenido problemas para integrarlas en mis propias aplicaciones sin requerir hacks, entonces si el pre-paquete tiene una actualización, tengo que migrarlas.

También uso Smarty y ADOdb en mi código CI, así que no importa lo que siempre termine haciendo cambios importantes en el código.

Adán
fuente
3

Tank Auth se ve bien, pero la documentación es solo una explicación de una página sobre cómo instalar, más un desglose rápido de cada archivo PHP. Al menos eso es todo lo que encontré después de mucho googlear. Quizás lo que la gente quiere decir arriba cuando dicen que Tank Auth está bien documentado es que el código está bien comentado. Eso es algo bueno, pero diferente a la documentación. Hubiera sido bueno tener alguna documentación sobre cómo integrar las características de Tank Auth con su código existente.

usuario1284303
fuente
3

Estoy probando Ion_Auth y lo aprecio, por cierto ...

SimpleLoginSecure Hace que la autenticación sea simple y segura.

Tiburón Fabiano
fuente