La pregunta lo dice todo realmente. Quiero proporcionar un servicio pero no quiero almacenar ninguno de los datos en una base de datos. Con todas las noticias recientes de piratería, etc., me parece que es mejor que los clientes tengan un control completo sobre sus datos.
El problema es que los datos almacenados son potencialmente confidenciales. Lo que iba a hacer era ... cuando un cliente visita el sitio web, habría una pregunta: "¿estás en una computadora personal o una computadora pública? Si están en una computadora pública, el sitio rechazaría el acceso.
Si estuvieran en una computadora personal, les pediría que establecieran una contraseña. Todos sus datos se cifrarían con esta contraseña. Ahora, obviamente, esto no es demasiado seguro. El método de cifrado estaría en JavaScript y su contraseña en texto plano, por lo que supongo que sería posible que un usuario inteligente localice la contraseña en localStorage y acceda a los datos.
Sin embargo, siento que esto no es un gran problema. Si está utilizando una computadora personal, las posibilidades de que esto suceda son remotas ya que ... otra persona necesitaría acceder a su cuenta de usuario específica en la computadora, otra persona necesitaría saber sobre el sitio ... otra persona necesitaría entender localStorage y cómo acceder a él. Los datos confidenciales no comprometerán su identidad ni mucho más. Simplemente registra algo que a la mayoría de la gente no le gustaría publicar públicamente.
Entonces, la pregunta es, ¿es localStorage lo suficientemente seguro?
Pregunta adicional ... ¿qué tan difícil es borrar su almacenamiento local? No quisiera que los usuarios borren accidentalmente sus datos.
Finalmente, ¿vale la pena cifrar / descifrar sus datos como si tuviera la contraseña para acceder al sitio?
fuente
Respuestas:
¿Qué tal simplemente no almacenar la contraseña en absoluto, ni siquiera en el almacenamiento local? Puede usar una función de derivación de clave para obtener una clave de la contraseña. Con una sal y un número razonable de iteraciones, esto debería ser decentemente seguro.
fuente
El uso de JavaScript con almacenamiento local es tan seguro como (su servidor más la conexión entre el navegador y el servidor).
Si alguien logra modificar su servidor y servir diferentes archivos JS o modificar (mientras se transmite) los archivos JS enviados desde el servidor al cliente, puede hacer cualquier cosa con los datos que desee.
Además: debido a que los datos están en el cliente, no puede hacer nada para protegerlos. En un servidor ordinario, por ejemplo, podría restringir la frecuencia de acceso (por ejemplo, para una contraseña remota segura: solo 1 contraseña leída en 10 minutos). Todo esto es inútil si los datos están en el cliente y todo el código que trabaja con los datos puede ser manipulado por un atacante.
Después de todo, ¡incluso con localstorage necesita proteger su aplicación web! ¿Por qué hacer cosas en el servidor (con suerte) seguro entonces? Si no, ¿por qué no usar un programa local instalado en el cliente?
fuente
¿Qué tal obtener una clave del servidor que se utiliza para descifrar los datos de localStorage?
Podría funcionar así:
Esto solo debería permitir el acceso mientras un usuario tenga una sesión establecida.
fuente
generalmente no es difícil borrar el almacenamiento local, pero depende del navegador. Sin embargo, debe acceder a las herramientas de desarrollo de los navegadores (firebug, webkit, etc.).
Piense en ello como piensa en las cookies. Nunca debe mantener datos confidenciales en el almacenamiento local. contraseñas, números de tarjetas de crédito, lo que sea.
siempre puede implementar alguna función para borrar el almacenamiento local después de x cantidad de inactividad, pero eso no va a resolver un problema de seguridad. Es como una sesión automática expirar. El mismo problema se aplica, si una persona deja una computadora y luego otra persona se sienta antes de que expire la sesión, pueden hacer cosas.
fuente
Dos cuestiones:
si almacena contraseñas de texto sin formato y luego se basa en el hecho de que no es probable que se encuentren, es solo seguridad a través de la oscuridad. Simplemente almacene los datos en texto sin cifrar y confíe en la misma suposición (todavía no es seguro, pero no tiene una falsa sensación de seguridad)
en la mayoría de los navegadores, si las personas limpian su caché, también eliminan su contenido de almacenamiento local. Las personas no esperan perder datos importantes cuando borran su historial y caché.
Creo que estás exagerando para lo que localStorage está destinado. Si desea utilizar una base de datos local que funcione bien con webapps, puede echar un vistazo a los couchapps de CouchDB .
Pero no almacene la contraseña.
fuente
Podrías usar javascrypt . Solicite al usuario una contraseña que se convierta en la clave de cifrado / descifrado
No necesita almacenar la contraseña, sino solicitarla cada vez que el usuario abra la página.
Se puede almacenar, si el usuario lo desea, y ahora las implicaciones.
Pero luego, para unir el comentario de stivlo, ¿qué pasa con:
Creo que deberías reconsiderar el comienzo del razonamiento. Evitar la nube solo por algunos eventos recientes y sensacionales, es una conclusión rápida.
fuente