Escenario:
- Página de solicitudes de usuarios en mi sitio
- El servidor construye el token con varios valores, lo cifra (a través de un algoritmo estándar de la industria, nada propio) usando una clave que solo el servidor conoce, y la devuelve como parte de los datos de la página
- El token está incrustado en el enlace en la página
- Cuando el cliente hace clic en ese enlace, el token se envía al servidor, se descifra y se analiza, y los valores se utilizan para determinar qué hacer
Esto se hace porque necesitamos que ciertos bits de información se envíen desde el cliente al servidor, pero no queremos filtrar esos bits de información al cliente porque revelarían detalles del funcionamiento interno del servidor.
El problema aquí es que, cada vez que un usuario en particular ve una página en particular, se genera el mismo token para ellos. Además de permitir que la misma solicitud se reproduzca contra el punto final hasta el infinito, esto hace que sea más probable que alguien pueda romper el cifrado del token (sí, sé que esto no es probable, pero es posible).
Para hacer que el cifrado sea aún más resistente, mi intención es insertar un valor aleatorio de alta calidad, digamos un GUID, en el token antes de que se cifre. El resultado final será la introducción de más entropía en el proceso de cifrado, lo que significa que para un conjunto dado de valores idénticos que nos interesan (es decir, todo excepto el valor aleatorio), el token generado es casi seguro que difiera. Este valor aleatorio siempre se insertará en el mismo lugar y siempre tendrá la misma longitud, por lo que quitarlo y tirarlo después de que se descifre el token es trivial. Efectivamente, esto es aumentar el cifrado con ofuscación.
A mi ojo inexperto, le parece que esta es una solución relativamente simple y segura para mi problema, pero ¿lo es o estoy perdiendo el tiempo y / o haciendo las cosas menos seguras y más complicadas?