Cómo verificar los datos de localStorage en un servidor

1

Esta es una publicación cruzada de mi Programmers.StackExchange post - Creo que este podría ser un mejor foro para hacer esta pregunta. Administradores: elimine cualquiera de ellos como lo considere oportuno.

En mi aplicación móvil, estoy almacenando el nombre de usuario de una persona que ha iniciado sesión y descargando algunos datos para el nombre de usuario dado / almacenado. Cuando el usuario busca actualizaciones de su contenido de datos en el servidor, el servidor reparte un delta del contenido, basado en el nombre de usuario. La aplicación luego actualiza su pantalla local en consecuencia.

El problema es que, dado que estoy usando localStorage, no hay garantía de que alguien no editará el nombre de usuario almacenado localmente y tratará de solicitar datos destinados a otra persona.

¿Cuál sería la mejor manera de sortear este posible agujero de seguridad? Por favor comente sobre este método que planeo implementar:

  1. Cada vez que inicie sesión, se generará y almacenará una cadena aleatoria para futuras comprobaciones en una base de datos, junto con su nombre de usuario y la fecha / hora de la solicitud.
  2. Cada vez que se recibe una solicitud para descargar datos de un nombre de usuario, debe ir acompañada de la cadena del intento anterior. Además, cada actualización nueva para el cliente está acompañada por una nueva cadena aleatoria, que se almacena en la base de datos y la anterior se considera caducada.
  3. Si la cadena aleatoria no se proporciona correctamente, el usuario se desconecta de la aplicación móvil (ya que esto podría ser alguien que manipule la aplicación).

La ventaja que veo para este método es que también tengo una pista de auditoría para verificaciones posteriores y análisis forense. ¿Cuáles son los defectos y qué podría mejorar?

    
pregunta Sudipta Chatterjee 09.01.2013 - 11:27
fuente

1 respuesta

3

Es necesario autenticar el dispositivo móvil del usuario (por lo tanto, autenticar implícitamente el suer).

Le sugiero que genere una cadena de 128 bits nueva y aleatoria (utilizando un PRNG criptográficamente seguro), la almacene en el dispositivo, la almacene en una base de datos del lado del servidor asociada al usuario y la use para autenticar el dispositivo . El dispositivo puede conectarse a través de SSL y luego enviar esta cadena de 128 bits para autenticarse en el servidor. Si está utilizando HTTP, una forma muy conveniente de hacerlo es colocar el valor de 128 bits en una cookie segura y persistente y usar HTTPS. La cadena de 128 bits se puede almacenar en el dispositivo de forma permanente. De esta manera, el usuario nunca necesita iniciar sesión nuevamente.

Como alternativa, puede autenticar el dispositivo haciendo que el dispositivo genere un certificado de cliente nuevo y luego conectarse mediante SSL con este certificado de cliente.

    
respondido por el D.W. 09.01.2013 - 11:59
fuente

Lea otras preguntas en las etiquetas