¿Es seguro usar LocalStorage?
30 de enero de 2020
0 minutos de lecturaInternet ha avanzado mucho desde el primer sitio web de la historia, que apenas podía mostrar texto con un formato básico. HTML5 es la evolución más reciente del lenguaje de marcado de hipertexto y se diseñó para hacer casi todo lo que un desarrollador web necesita, sin plugins adicionales para el navegador. Con HTML5, los desarrolladores obtuvieron una gran variedad de elementos semánticos y gráficos, e incluso algunos trucos relacionados con el almacenamiento web, en particular el almacenamiento local. Por supuesto, muchos se preguntan: ¿es seguro usar el almacenamiento local?
El almacenamiento local ha llamado la atención de los desarrolladores como una solución ligera para guardar datos sin usar bases de datos ni siquiera el servidor. Suena bien, pero ¿siempre es buena idea usarlo? Aquí tienes algunas opiniones del equipo de Snyk.
¿Qué es LocalStorage?
LocalStorage es un objeto de almacenamiento web de HTML5 que permite guardar datos en el cliente, es decir, de forma local en la computadora de un usuario. Los datos guardados localmente no tienen fecha de vencimiento y permanecen hasta que se eliminan. (En cambio, el almacenamiento de sesión, otra API de almacenamiento web de HTML5, elimina los datos guardados cuando se cierra el navegador).
El almacenamiento local está basado completamente en JavaScript. Además, aunque sigue generando un documento de texto sin formato en el dispositivo del usuario, permite guardar hasta 5 MB de datos (en comparación con los 4 KB de una cookie). Esto ha permitido muchos usos interesantes del almacenamiento local, como administrar contenido para reducir la necesidad de solicitarlo a un servidor y acelerar los tiempos de carga.
Si se usa con criterio, el almacenamiento local puede ser una solución ligera y potente para guardar datos, aunque no está exenta de problemas. Estas son algunas razones por las que usarlo podría ser una mala idea, según el tipo de datos que se guarden.
Por qué usar LocalStorage podría ser una mala idea
El almacenamiento local no es intrínsecamente más seguro que las cookies. Si se tiene esto en cuenta, el objeto puede usarse para guardar datos que no sean relevantes desde el punto de vista de la seguridad. Sin embargo, hay varias razones para reconsiderar el uso del almacenamiento local.
1. Si un sitio es vulnerable a XSS, LocalStorage no es seguro
Quizás la principal objeción al uso del almacenamiento local sean las vulnerabilidades de seguridad asociadas. Comparte muchas características con las cookies, incluidos los mismos riesgos de seguridad. Uno de ellos es la vulnerabilidad a los ataques de scripting entre sitios, que roban cookies para que los hackers puedan hacerse pasar por un usuario y usar su sesión iniciada en un sitio. Guardar información confidencial, como una contraseña, en un archivo de almacenamiento local facilita el trabajo de un hacker, porque no necesitará cargar la cookie en su propio navegador.
2. Los desarrolladores no controlan los datos almacenados localmente
Con el almacenamiento local no hay almacenamiento del lado del servidor, ni una base de datos que el desarrollador pueda controlar. Esto puede ser problemático por varios motivos. Por ejemplo, los desarrolladores no tienen forma de actualizar el código o la información una vez que se guardan. El usuario tendría que eliminar el archivo manualmente, lo que implica encontrarlo, o borrar la caché del navegador y perder todos los datos almacenados.
3. Las personas borran sus cachés
Borrar periódicamente la caché del navegador ayuda a que las cookies funcionen mejor y suele ser el primer paso para solucionar problemas del navegador, como cuando una página no carga correctamente. Esto supone un problema si se usa el almacenamiento local para que funcionen ciertas características de un sitio. Si un usuario borra la caché del navegador, esa información se pierde para siempre. Por eso, el almacenamiento local es más útil como base de datos de respaldo.
Alternativas a LocalStorage
Existen algunas alternativas al almacenamiento local, según si la información es confidencial o no. Los desarrolladores que no quieran usar el almacenamiento local pueden:
Usar sesiones del lado del servidor para la información confidencial:Guardar datos en el servidor ofrece varias ventajas cuando se trata de información confidencial. En primer lugar, el desarrollador puede garantizar su seguridad y controlar mejor las sesiones individuales (puede terminarlas de inmediato si es necesario). En segundo lugar, los datos están protegidos dentro de la arquitectura y hay menos posibilidades de que queden expuestos.
Para información no confidencial, elige IndexedDB: Para los desarrolladores que prefieren usar sesiones del lado del cliente, IndexedDB permite crear aplicaciones que se pueden guardar localmente. Aunque no cuenta con un soporte tan amplio en los navegadores como el almacenamiento local, puede ser útil para guardar datos no confidenciales de forma local. IndexedDB tiene una gran ventaja sobre el almacenamiento local: es una base de datos completa capaz de manejar más tipos de datos.
Almacena los datos de forma inteligente
Si se implementa con criterio, el almacenamiento local puede mejorar el rendimiento del sitio y ayudar a crear aplicaciones más ligeras. Sin embargo, nunca debe usarse para información confidencial, como contraseñas o datos personales. Hacerlo crea un riesgo de seguridad que, francamente, se puede evitar si el servidor del sitio ya es seguro.
Para la información que requiere cifrado y seguridad, existen otras soluciones eficaces y rápidas, como las sesiones del lado del servidor. La ciberseguridad es una preocupación importante, así que no vale la pena correr el riesgo. Mejor no lo hagas.
Snyk te ayuda a encontrar y corregir vulnerabilidades de forma continua para que mantengas la seguridad. Regístrate y obtén una cuenta gratis.
Comienza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.
