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

Resuelto GavinR asked hace 54 años • 11 respuestas

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

GavinR avatar Jan 01 '70 08:01 GavinR
Aceptado

Actualización (14 de mayo de 2010):

Resulta que el desarrollador ruso Ilya Konyukhov tomó el desafío 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 la autenticación de tanque resultante parece la respuesta a la pregunta del OP. Voy a arriesgarme y llamar a Tank Auth la mejor biblioteca de autenticación para CodeIgniter disponible en la actualidad. Es una biblioteca sólida que tiene todas las características que necesitas y nada de lo que no necesitas:

Autenticación del tanque

Ventajas

  • Con todas las funciones
  • Huella ajustada (20 archivos) considerando el conjunto de características
  • Muy buena documentacion
  • Diseño de base de datos simple y elegante (solo 4 tablas de base de datos)
  • La mayoría de las funciones son opcionales y fáciles de configurar.
  • Soporte de archivos de idioma
  • reCAPTCHA compatible
  • Se conecta al sistema de validación de CI
  • Correos electrónicos de activación
  • Iniciar 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 hash (y también codifica códigos de inicio de sesión automático en la base de datos)
  • No utiliza preguntas de seguridad.
  • La separación de datos de usuario y perfil es muy buena.
  • Modelo de seguridad muy razonable en torno a intentos fallidos de inicio de sesión (buena protección contra bots y ataques DoS)

(Menores) Contras

  • Los códigos de contraseña perdidos no están codificados en la base de datos
  • Incluye un CAPTCHA nativo (deficiente), lo cual es bueno para aquellos que no quieren depender del servicio reCAPTCHA (propiedad de Google), pero en realidad no es lo suficientemente seguro.
  • Documentación en línea muy escasa (problema menor aquí, ya que el código está muy bien documentado y es intuitivo)

Descargue la autenticación del tanque aquí


Respuesta original:

También implementé el mío propio (actualmente alrededor del 80% está hecho 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 funciones básicas, eran inherentemente INseguros o estaban demasiado inflados para mi gusto.

De hecho, 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:

Autenticación DX

Ventajas

  • Muy completo
  • Tamaño mediano (más de 25 archivos), pero logra sentirse bastante delgado
  • Excelente documentación, aunque parte está en un inglés un poco entrecortado.
  • 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 (nada mal para un PRNG)
  • Prohibición con cadenas de 'motivos' 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 pseudoevento casero: buena intención, pero no da en el blanco
  • Dos campos de contraseña en la tabla de usuarios, mal estilo
  • Utiliza dos tablas de usuarios 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: ¡no son seguros!
  • La clave de inicio de sesión automático no está codificada en la base de datos: ¡prácticamente tan insegura como almacenar contraseñas en texto sin cifrar!
  • El sistema de roles es un completo desastre: la función is_admin con nombres de roles codificados, is_role es un completo desastre, check_uri_permissions es un desastre, toda la tabla de permisos es una mala idea (un URI puede cambiar y mostrar páginas sin protección; 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 está desordenada

Luz FreakAuth

Ventajas

  • Muy completo
  • Código en su mayoría 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 con 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 microgestionado
  • Terrible separación Vista-Controlador, con mucha lógica de programa en vistas y salida codificada en controladores. ¡Factor decisivo!
  • Código HTML deficiente en las vistas incluidas.
  • Incluye CAPTCHA de calidad inferior
  • La depuración comentada hace eco en todas partes
  • Fuerza una estructura de carpetas específica.
  • Fuerza una biblioteca Ajax específica (se puede cambiar, pero no debería estar allí en primer lugar)
  • No hay límite máximo de intentos de inicio de sesión: ¡MUY inseguro! ¡Factor decisivo!
  • Validación de formularios de secuestro
  • Utiliza hash md5 potencialmente inseguro

usuario_pc

Ventajas

  • Buen conjunto de características para su pequeño tamaño
  • 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
  • Un sistema de estatus (rol) poco intuitivo (índices al revés, poco práctico)
  • Utiliza hash sha1 potencialmente inseguro

Recién alimentado

Ventajas

  • Tamaño reducido (6 archivos)

Contras

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

Autenticación Redux/Ion

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

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

Ventajas

  • Ligero y sencillo 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 desarrolladores/usuarios.
  • Fácil de implementar en un proyecto

Contras

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

Inicio de sesión simpleSeguro

Ventajas

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

Contras

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

No me malinterpretes: no pretendo faltarle el respeto a ninguna de las bibliotecas anteriores; Estoy muy impresionado con lo que han logrado sus desarrolladores y lo lejos que ha llegado cada uno de ellos, y no tengo inconveniente en reutilizar parte de su código para crear el mío propio. Lo que estoy diciendo es que, a veces, en estos proyectos, el enfoque cambia de las "necesidades" esenciales (como prácticas de seguridad estrictas) a las "algo que es bueno tener" más suaves, y eso es lo que espero remediar. .

Por lo tanto: volvamos a lo básico.

Autenticación para CodeIgniter bien hecha

Aquí está mi lista MÍNIMA requerida de funciones de una biblioteca de autenticación. También resulta ser un subconjunto de la lista de funciones 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 mejorar 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 usando nombre de usuario o correo electrónico
  9. Separación de datos de usuario y perfil.
  10. Correos electrónicos de activación y contraseñas perdidas.
  11. Función de inicio de sesión automático de cookies
  12. Phpass configurable para hash (¡con la sal adecuada, por supuesto!)
  13. Hash de contraseñas
  14. Hashing de códigos de inicio de sesión automático
  15. Hash de códigos de contraseña perdidos
  16. Se conecta al sistema de validación de CI
  17. ¡SIN preguntas de seguridad!
  18. Se aplica una política de contraseñas seguras en el lado del servidor, con validador opcional en el lado del cliente (Javascript)
  19. ¡Se impuso un número máximo de intentos fallidos de inicio de sesión con MEJORES PRÁCTICAS contramedidas contra ataques de diccionario y DoS!
  20. ¡Todo el acceso a la base de datos se realiza a través de declaraciones preparadas (encuadernadas)!

Nota: esos últimos puntos no son una exageración 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: el número 17 es cómo el correo electrónico de AOL de Sarah Palin fue pirateado durante la campaña presidencial; una desagradable combinación de los números 18 y 19 fue la culpable recientemente cuando las cuentas de Twitter de Britney Spears, Barack Obama, Fox News y otros fueron pirateadas; y 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 ataque automatizado en 2008.

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


<despotricar>

Básicamente, así es como es: no me importa si una biblioteca de autenticación ofrece un montón de funciones, administración avanzada de roles, compatibilidad con PHP4, bonitas fuentes CAPTCHA, tablas de países, paneles de administración completos, detalles, 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 lo hace , en realidad está haciendo más daño que bien.

</rant>

/Jens Roland

Jens Roland avatar Jan 24 '2009 23:01 Jens Roland

Tenga en cuenta que el "listado completo" de Jens Roland no incluye roles de usuario. Si está interesado en asignar diferentes roles de usuario (como administrador/usuario o administrador/editor/usuario), estas bibliotecas lo permiten:

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

Tank_Auth (n.º 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 involucran seguridad
  • Se puede utilizar la misma mesa/modelo para ambos.
  • Ambos pueden configurarse para cargarse en el constructor del controlador (o incluso cargarse automáticamente)

Tiene MUCHO sentido tener una biblioteca para manejar ambos, si es necesario. Estoy cambiando a Ion_Auth desde Tank_Auth debido a esto.

Burton Kent avatar Jul 09 '2010 13:07 Burton Kent

Ion_auth! ¡Parece muy prometedor y de tamaño reducido! Me gusta..

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

Marko avatar Mar 10 '2010 20:03 Marko