ID de propiedad inusual usando localStorage; ¿Algún problema posible?

2

Estoy trabajando en un pequeño proyecto paralelo en PHP. Todavía puedo incluir algún tipo de registro real de nombre de usuario / contraseña en la línea, pero por ahora, para facilitar la atención, mi objetivo es permitir que cualquier usuario anónimo use mi sitio sin registrarme. Así es como funciona, en general:

  1. El usuario va al sitio y crea una "cosa"
  2. En la respuesta de create.php, el usuario recibe una cadena generada aleatoriamente. Esto no se almacena en el servidor, pero su hash es.
  3. La página de "éxito" usa Javascript localStorage para almacenar la cadena generada.
  4. En el futuro, si el usuario desea realizar pequeños cambios en su "cosa", rellena un formulario en una página. Luego, la solicitud se envía con esta cadena localStorage. En el lado del servidor, se valida contra el hash antes de actualizar la cosa.
  5. Algún día, cuando implemento nombres de usuario / contraseñas, los usuarios pueden visitar una página para obtener la propiedad de sus elementos al tomar todos sus valores de almacenamiento local.

Algunas cosas para pensar:

He estado leyendo sobre las vulnerabilidades de XSS utilizadas para robar las ID de sesión de cookies e información similar. El rasgo común con muchos de ellos es que el malo es capaz de ejecutar Javascript en el dominio de destino, lo que me parece una gran suposición. No hace falta decir que no uso eval() , e incluso trato de evitar innerHtml siempre que sea posible. Soy especialmente consciente de cada vez que se ponen en uso las cadenas generadas por el usuario. Creo que me ha ayudado el hecho de que mi sitio no es especialmente complejo ni personalizable por el usuario.

Sé del encabezado de HttpOnly, pero me gusta Javascript, y quiero que muchas de las acciones de mi sitio sean asíncronas (para que pueda guardar la información de un formulario sin cargar una nueva página)

Además, debo tener en cuenta que la información guardada en mi sitio está mejor etiquetada como entretenimiento y, en su sentido apropiado, no debería contener información confidencial, ni siquiera las direcciones de correo electrónico (vendrían cuando implemento nombres de usuario / contraseñas) así que creo que estoy bien con alguien que pueda acceder por medio del acceso físico (es decir, robar la computadora portátil de un usuario); Básicamente estoy tratando de encontrar el equilibrio adecuado entre seguridad y conveniencia.

Ahora también estoy considerando que, dependiendo de lo costoso que sea obtener un certificado, HTTPS sería lo suficientemente importante como para incluirlo. Supongo que me sorprendería que alguien observara paquetes HTTP solo para apropiarse de la "cosa" de otra persona.

    
pregunta Katana314 19.08.2013 - 21:56
fuente

1 respuesta

2

Me parece que es un enfoque razonablemente seguro en lugar de tener cuentas de usuario y administración de sesiones. HTTPS es una necesidad, pero también me gustaría ver los siguientes puntos para abordar sus problemas específicos.

  

En la respuesta de create.php, el usuario recibe una cadena generada aleatoriamente. Esto no se almacena en el servidor, pero su hash es.

Asegúrese de que la cadena generada se genere utilizando un mecanismo criptográficamente seguro. p.ej. openssl_random_pseudo_bytes

Si desea agregar seguridad adicional, puede agregar un salt , o mejor aún, usar bcrypt para el valor almacenado del servidor.

  

Sé del encabezado de HttpOnly, pero me gusta Javascript, y quiero que muchas de las acciones de mi sitio sean asíncronas (para que pueda guardar la información de un formulario sin cargar una nueva página)

Puede usar una cookie con HttpOnly establecido: la cookie seguirá siendo enviada con sus solicitudes AJAX, solo el JavaScript que no podrá acceder. También configure el marca de seguridad y use esto junto con HTTPS para asegurarse de que su cookie solo se transmita a través de una conexión segura .

  

El rasgo común con muchos de ellos es que el malo es capaz de ejecutar Javascript en el dominio de destino, lo que me parece una gran suposición.

De hecho, es la definición de XSS en la que un atacante puede ejecutar JavaScript en el dominio de destino. Asegúrese de seguir los consejos en XSS (Cross Site Scripting) Prevention Cheat Sheet

    
respondido por el SilverlightFox 21.08.2013 - 13:31
fuente

Lea otras preguntas en las etiquetas