2010-06-04 13 views
22

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.pregunta en GWT, Cookies y dirección 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.

por lo que 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 ingresaría los datos en el cuadro de inicio de sesión e iniciar sesión automáticamente,

también el botón de cierre de sesión de la aplicación web eliminaría la información en la cookie y lo lleva a la página de inicio de sesión (elimine la información de la cookie y lo dirija a la parte de inicio de sesión de la página web).

o habría un enfoque diferente.

Respuesta

62

diría que casi lo hizo bien:. D aquí es cómo manejo de conexión/desconexión en mi solicitud:

  1. El usuario carga la página; si tiene una cookie configurada 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.
  2. 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 cifrada, pero es difícil de lograr con GWT; por ejemplo, consulte this question).
  3. El servidor comprueba si el usuario/contraseña hash (ver a continuación) coincide con la combinación de lo que hay en la base de datos/lo que sea. Si es así, genera un token (solo una cadena aleatoria, bastante larga, como UUID) y lo envía de vuelta al cliente.
  4. Si el usuario marcó la casilla "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).
  5. Cuando el cliente recibe el token, debe usarlo para cada solicitud realizada en el servidor que solo desea 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ía en solo en la cookie, será vulnerable a a XSRF attack. 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).
  6. Al cerrar sesión explícitamente (haciendo clic en el enlace "Cerrar sesión", etc.), envíe una información al servidor que este usuario acaba de cerrar. 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 usuario debe sesión de usuario en forma automática en el punto 1.

Algunas notas adicionales

  • Esto es muy importante: recordar comprobar en el lado del servidor si el token pasa a través de la cookie es igual al uno pasado como parte de la solicitud/carga útil.
  • No almacene las contraseñas en su base de datos como texto sin formato - almacene hashes de las contraseñas. Use BCrypt para la máxima seguridad. Es por eso que escribí que debe comparar contraseñas hash, no las contraseñas reales.
  • Cuando el servidor encuentra un token no válido, esto puede significar un número de cosas - de normal a alerta. En general, es bueno registrar estas situaciones y verificar regularmente los registros de cualquier actividad anormal.
    1. El usuario no había visitado el sitio durante un tiempo prolongado y el token expiró. 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 ? que hayan caducado)
    2. Tal vez usted ha puesto algunas otras restricciones de token de validación - al igual que el testigo no puede ser vencido y el intento actual debe ser de la misma IP como el que el token se ha generado originalmente para.
    3. Se ha producido un error al enviar la solicitud y llegó malformación/corrompido - no puede hacer mucho sobre esto, pero redirigir al usuario a la página de inicio de sesión
    4. Un tercero está tratando de iniciar la sesión utilizando un token artesanal. Si usa tokens estúpidamente fáciles de adivinar (como el nombre de usuario, rot13, el propio "cifrado" súper-especial-impresionante), entonces se se morderá por esto tarde o temprano. UUID es un ejemplo de un buen candidato token, como su nombre lo indica, es un identificador universalmente único, lo que significa que no hay dos usuarios que tengan los mismos UUID y los UUID mismos sean aleatorios y largos.

Seguridad en aplicaciones AJAX es un asunto serio - He visto demasiadas aplicaciones web con fácil de explotar agujeros de seguridad ... Asegúrese de entender completamente y por qué lo que está haciendo. Si tienes alguna pregunta, no dude en preguntar :)


Actualización 12/06/2015:GWT - Security RPC XSRF

+2

esta respuesta también me ha ayudado, ya que me ha dado una idea de la tala en de forma segura, vitorea igor – molleman

+7

+1 Esta respuesta fue mucho más esclarecedora que las preguntas frecuentes de seguridad. Sería realmente bueno si pudieras escribir sobre esto, tal vez con un código de muestra :-). – helpermethod

+1

Deberías escribir sobre esto en tu blog (quizás con algún código de ejemplo). Sería la máxima referencia en las sesiones :-). – helpermethod

4

Here puede encontrar información acerca de la seguridad de inicio de sesión en GWT. También hay una sección sobre el uso de cookies para recordar que un usuario ha iniciado sesión en

+0

gracias este vino muy práctico – molleman

1

Aquí es un mejor vínculo que vine a (con total implementation). Un ciclo de inicio de sesión completo con el mantenimiento de una cookie (sessionId).

esto sería mucho mejor si usted tiene una opción llamada "Remember me"

Session Management in GWT