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:
- El usuario va al sitio y crea una "cosa"
- En la respuesta de create.php, el usuario recibe una cadena generada aleatoriamente. Esto no se almacena en el servidor, pero su hash es.
- La página de "éxito" usa Javascript localStorage para almacenar la cadena generada.
- 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.
- 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.