java - name - meta tags generator
pregunta sobre GWT, Cookies y dirección de páginas web (3)
Estoy usando gwt para crear un sitio web. esta pregunta es sobre una página de inicio de sesión y cookies para guardar los detalles de inicio de sesión. GWT le permite crear un sitio web en una sola página web.
mi aplicación se ejecuta en una página web. Tengo la aplicación configurada como, hay un cuadro de inicio de sesión con un botón de inicio de sesión, y si los detalles son correctos cargará la interfaz de usuario subyacente y eliminará el cuadro de inicio de sesión.
eso significa que cada vez que actualizo mi página, la aplicación me lleva a la página de inicio de sesión. ¿Existe alguna forma de configurar una cookie que contenga la información del usuario, por ejemplo, un día, que ingrese los detalles en el cuadro de inicio de sesión e inicie sesión automáticamente?
también el botón de cierre de sesión dentro de la aplicación web eliminaría la información en la cookie y lo llevaría a la página de inicio de sesión (eliminará la información de la cookie y lo dirigirá a la parte de inicio de sesión de la página web).
o habría un enfoque diferente.
Diría que casi lo hiciste bien: D Aquí es cómo manejo el inicio / cierre de sesión en mi aplicación:
- El usuario carga la página; si tiene una cookie establecida con un token (consulte los siguientes puntos para obtener más información), envíe ese token al servidor para verificar si aún es válido. Si es válido, ha iniciado sesión, vaya al punto 5. Consulte las notas a continuación sobre cómo manejar un token no válido.
- El usuario ingresa la combinación usuario / pase. Esta información se envía al servidor (lo mejor sería enviarla a través de una conexión encriptada, pero es difícil de lograr con GWT; por ejemplo, vea esta pregunta ).
- El servidor verifica si la combinación de hash de usuario / contraseña (ver a continuación) coincide con lo que está en la base de datos / lo que sea. Si es así, genera un token (solo una cadena aleatoria, bastante larga, como un UUID ) y lo envía de vuelta al cliente.
- Si el usuario marcó la casilla de verificación "Recordarme" durante el inicio de sesión, almacene el token en una cookie con una fecha de vencimiento futura (consulte otras guías / preguntas sobre el período de tiempo recomendado).
- Cuando el cliente recibe el token, debe usarlo para cada solicitud realizada al servidor que solo desee que realicen los usuarios autenticados. Allí, el servidor comprueba si el token es válido (debe hacer un seguimiento de token (s) / pares de usuario en su base de datos) y, de ser así, autorizar la transacción / lo que sea. Aquí está el truco: si confías solo en la cookie, serás vulnerable a un ataque XSRF . Es por eso que también debes pasar el token (la cookie se transfiere automágicamente, por eso es posible un ataque XSRF) como parte de la solicitud (ya sabes, como un campo adicional en JSON o un campo en un POJO que envías a través de GWT). RPC o incluso en el encabezado HTTP).
- En el cierre de sesión explícito (haciendo clic en el enlace "Cerrar sesión", etc.), envíe una información al servidor que este usuario acaba de cerrar sesión. El servidor debería eliminar / invalidar el token. Debería hacer esto independientemente de la opción "Recordarme", ya que el cierre de sesión explícito significa que el usuario desea eliminar la información de inicio de sesión en esa PC / navegador y evitar que otros inicien sesión como él / ella. Si el usuario simplemente cierra el navegador / página y ha configurado la cookie correctamente en el punto 4 (es decir, no caducará al cerrar el navegador - nuevamente, solo si se eligió la opción "Recordarme"), en la siguiente visita el usuario debe iniciar sesión automáticamente en el punto 1.
Algunas notas adicionales
- Esto es muy importante: recuerde verificar en el lado del servidor si el token que pasa a través de la cookie es igual al que pasó como parte de la solicitud / carga.
- No almacene las contraseñas en su base de datos como texto sin formato: almacenar los hashes de las contraseñas. Use BCrypt para la máxima seguridad. Es por eso que escribí que debes comparar hashes de contraseñas , no las contraseñas reales.
- Cuando el servidor encuentra un token no válido, esto puede significar varias cosas , desde normal hasta alerta. En general, es bueno registrar estas situaciones y verificar regularmente los registros de cualquier actividad anormal.
- El usuario no había visitado el sitio durante mucho tiempo y el token caducó . Asegúrese de controlar la caducidad del token correctamente en el lado del cliente (las fechas de caducidad correctas deberían redirigir al usuario a la página de inicio de sesión, sin enviar el token caducado) y del servidor (una tarea especial que escanea diariamente la lista de tokens y elimina el expiró?)
- Quizás haya puesto otras restricciones en la validación de tokens , como que el token no puede expirar y el intento actual debe ser del mismo IP que el token para el que se generó originalmente.
- Hubo un error al enviar la solicitud y vino malformado / dañado - no se puede hacer mucho al respecto, pero redirigir al usuario a la página de inicio de sesión
- Un tercero está intentando iniciar sesión con un token artesanal . Si utilizas tokens estúpidamente fáciles de adivinar (como el nombre de usuario, rot13, el propio "cifrado" súper-especial-impresionante), tarde o temprano te morderá esto. UUID es un ejemplo de un buen candidato token, como su nombre lo indica, es un identificador único universal , lo que significa que no dos usuarios deben tener los mismos UUID y los UUID son aleatorios y largos.
La seguridad en las aplicaciones AJAX es un asunto serio : he visto demasiadas aplicaciones web con agujeros de seguridad fáciles de explotar ... Asegúrese de comprender completamente qué y por qué está haciendo. Si tiene alguna pregunta, no dude en preguntar :)
Actualización 2015-06-12: GWT - Seguridad RPC XSRF
Here puede encontrar información sobre la seguridad de inicio de sesión en GWT. También hay una sección sobre cómo usar las cookies para recordar que un usuario ha iniciado sesión.
Este es el mejor enlace que obtuve (con implementation
completa). Un ciclo de inicio de sesión completo con el mantenimiento de una cookie ( sessionId
).
Esto sería mucho mejor si tienes una opción llamada " Remember me
"