Sí, al final para estar "conectado" es igual a haber establecido una variable de sesión. Así que tu pregunta básicamente se reduce a la seguridad de la sesión. Aquí hay un par de cosas que puede querer revisar y / o considerar:
- Use cookies para sus ID de sesión, el uso compartido de enlaces no conducirá al secuestro de sesión.
- Lo ideal es usar HTTPS, de modo que las sesiones no puedan ser secuestradas fácilmente en entornos abiertos de Wi-Fi.
- Asegúrese de que falsificación de solicitud entre sitios no funcione en sus sitios.
- Asegúrese de no ser vulnerable a Ataques de secuencias de comandos entre sitios , o al menos haga uso de
HttpOnly
atributo de las cookies.
- Asegúrese de que sus ID de sesión no sean predecibles y no puedan ser fijadas a valores predefinidos por el usuario
- Asegúrese de que los datos de su sesión no sean (fácilmente) accesibles para otros. Por ejemplo, en entornos de alojamiento virtual podría ser fácil para otros leer o incluso manipular los datos de su sesión, que generalmente es un archivo simple dentro de
/tmp
.
Obviamente, esta no es una lista exhaustiva, sino algunas cosas que me pasaron por la cabeza.
las contraseñas de codificación unidireccional en la base de datos
Eso no hace falta decirlo! Pero la codificación unidireccional simple (es decir, el hashing) no es suficiente en estos días. Busque en las funciones de derivación clave reales , por ejemplo. PBKDF2 y bcrypt . Estos están diseñados para reducir drásticamente los ataques de fuerza bruta.
Utilice la base de datos en lugar de sesiones.
¿Qué quieres decir con eso? La base de datos no sabe nada sobre HTTP.
Use JavaScript para validar que el usuario está usando un navegador.
No se puede hacer.
Bloquea una cuenta después de 5 fallos de inicio de sesión.
Aunque es una idea noble, es completamente poco práctica para la mayoría de los sitios. ¿Qué haces con las cuentas que están bloqueadas? ¿Vas a ofrecer soporte telefónico? ¿Cómo autenticar a los usuarios en el teléfono? En lo que podría pensar es en un tiempo de espera, lo que haría inviable que los atacantes incluso intenten contrarrestar las contraseñas de fuerza bruta.