localStorage para aplicaciones a través de https. ¿Qué expectativas hay?

10

Ejecuto un libro de calificaciones en línea. Para mantener la privacidad de los datos de los estudiantes, transfiero todos los datos a través de https.

Ahora, me gustaría usar localStorage para evitar cálculos redundantes y solicitudes de servidor. Sin embargo, según la especificación de HTML5, el almacenamiento local no está encriptado.

¿Hay un estándar de la industria para manejar las expectativas de los usuarios aquí? Podría imaginar que los usuarios le pidan algo como "¿Desea usar almacenamiento local? Hará que todo sea más rápido, pero si la computadora está comprometida, los datos de los estudiantes podrían ser robados. Si esta es una computadora pública, elija 'No'".

¿Qué tendencias hay para el lado UX de esto?

    
pregunta Riley Lark 29.11.2011 - 22:41
fuente

3 respuestas

7

Almacenamiento local es una característica relativamente nueva disponible para las aplicaciones web, pero algún tipo de 'estándares de la industria' o mejor Las prácticas ya han aparecido. OWASP HTML5 cheat sheet teniendo en cuenta su caso indica que:

  

El mecanismo de almacenamiento subyacente puede variar de un agente de usuario a otro. En otras palabras, cualquier autenticación que requiera su aplicación puede ser ignorada por un usuario con privilegios locales en la máquina en la que se almacenan los datos. Por lo tanto, se recomienda no almacenar ninguna información confidencial en el almacenamiento local.

No importa si la página original se entrega a través de http: o https :, el acceso local a la máquina (o la falla XSS en el sitio web) puede extraer la información almacenada en ella. Entonces, simplemente, no debes poner ninguna información confidencial / privada.

No conozco ningún mensaje de texto de confirmación de usuario común sobre la confidencialidad del almacenamiento local, pero el suyo lo deja bastante claro. Pero aún así, recomiendo no poner datos confidenciales en localStorage.

Descargo de responsabilidad: Soy el coautor de la hoja de trucos HTML5.

    
respondido por el Krzysztof Kotowicz 30.11.2011 - 01:14
fuente
4

@Krzysztof Kotowicz tiene una buena respuesta. Estoy de acuerdo con sus recomendaciones.

Otra posibilidad, para las aplicaciones web que realmente desean almacenar información confidencial en el almacenamiento local, podría ser almacenarla en forma cifrada. La aplicación del lado del cliente podría cifrarla y autenticarla (utilizando un algoritmo de cifrado de clave simétrica y un algoritmo de autenticación de mensajes), almacenar la versión cifrada; Para leer los datos, el software del lado del cliente podría verificar el MAC y descifrar. Si se toma este enfoque, es muy importante evitar almacenar la clave simétrica en el almacenamiento local del lado del cliente. En su lugar, la clave debe almacenarse persistentemente en el servidor; el cliente puede consultar la clave del servidor y almacenar la clave solo en la memoria, pero no en el almacenamiento persistente.

Sin embargo, la encriptación de datos en el almacenamiento local tiene una serie de limitaciones y limitaciones, que pueden hacerla poco atractiva en muchas configuraciones. Por ejemplo, evita el uso de la aplicación en modo desconectado. Por estos motivos, el consejo de @Krzysztof Kotowicz para evitar el almacenamiento de información confidencial o confidencial en el almacenamiento local es probablemente el mejor consejo para la mayoría de las aplicaciones web.

    
respondido por el D.W. 30.11.2011 - 05:50
fuente
1

Apoyo los consejos de D.W.

Podría considerar desarrollar lo que generalmente se llama una "aplicación a prueba de host" o una "aplicación web de conocimiento cero". Se ve y se comporta como una aplicación web normal, pero todos los datos del usuario están encriptados localmente por el navegador antes de ser cargados. La clave para los procesos de cifrado es una frase de contraseña que nunca se envía ni se guarda en el servidor. Por lo tanto, nadie excepto el propio usuario puede acceder a los datos.

Exención de responsabilidad: este podría ser un consejo parcial ya que soy el co-fundador de Clipperz, un administrador de contraseñas en línea que utiliza este enfoque.

Puede leer más sobre la arquitectura de una aplicación web de conocimiento cero en el sitio web de Clipperz. Si decides escribir el tuyo, puedes utilizar la biblioteca de Javascript de Clipperz (con licencia AGPL) o usar esta otra biblioteca de cifrado de Stanford.

    
respondido por el Marco Barulli 02.12.2011 - 16:03
fuente

Lea otras preguntas en las etiquetas