¿Qué tan seguro es el almacenamiento local?

33

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?

JasonS
fuente
2
JavaScript del lado del cliente no es el mejor lugar para hacer criptografía. Cualquier usuario inteligente puede mirar el código y piratear su algoritmo de cifrado y hacerlo de modo que realmente no haga nada y simplemente acepte la contraseña cifrada.

Respuestas:

10

¿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.

CodesInChaos
fuente
¿Sería más seguro si la contraseña se enviara a PHP que luego generó la clave detrás de escena?
JasonS
No. La contraseña se da en el cliente al principio. Al enviarlo al servidor, aumenta el riesgo de que pueda ser robado. Hacer la derivación de clave en JS mantiene el secreto en el cliente. En todos los casos, debe olvidar el PW poco después. Pero creo que todavía no tiene sentido, mira mi respuesta.
Muchos hackers son bastante inteligentes ... Usa Lib bCrypt.
Eddie B
2

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?

Daniel Böhmer
fuente
¿No crees que el principal problema de seguridad es si alguien más usa o roba el dispositivo?
2

¿Qué tal obtener una clave del servidor que se utiliza para descifrar los datos de localStorage?

Podría funcionar así:

  • Cuando se establece una sesión, el servidor devuelve una clave.
  • Esa clave se utiliza para cifrar / descifrar los datos en localStorage.
  • Cuando el usuario abandona la página, se pierde la clave, lo que impide que otros lean lo que se encuentra en localStorage.

Esto solo debería permitir el acceso mientras un usuario tenga una sesión establecida.

Justin Meyer
fuente
3
Sin embargo, esto no funcionaría para acceder a los datos sin conexión (lo que parece un caso de uso principal para localStorage). Para utilizar este método sin conexión, deberá conservar la clave.
Timothy Lee Russell el
0

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.

hvgotcodes
fuente
0

Dos cuestiones:

  1. 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)

  2. 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.

Giacomo
fuente
0

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:

  1. acceso a múltiples dispositivos
  2. apoyo
  3. Se te olvidó tu contraseña
  4. limpieza de caché demasiado fácil

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.

Mic
fuente