He escrito un juego en JavaScript que se ejecuta completamente del lado del cliente. En el juego, el jugador resuelve acertijos para avanzar al siguiente nivel del juego. Guardo el nivel actual del juego en una cookie, para que puedan volver a cargar la página y continuar desde el último nivel que alcanzaron.
Desafortunadamente, el usuario puede editar la cookie y así ir directamente a cualquier nivel de juego. Quiero prevenir eso. ¿Cuáles son mis opciones?
Cifre la cookie con JSON Web Token (JWT). Primero firme la cookie con una clave secreta y guárdela en el navegador del usuario y en el juego descifre con su misma clave secreta y obtenga los valores. Si el usuario edita la cookie, entonces no coincidirá con su clave secreta y si el secreto no coincide, puede hacer que vuelva a jugar desde el nivel 1 como castigo.
Simplemente pueden editar su código JS y omitir cualquier verificación que agregue allí. Así es como lo haría, siempre que cada nivel tenga solo 1 solución.
En primer lugar, guarde cada nivel en formato json. Luego, calcule el hashsum de cada nivel, cuando esté en el estado resuelto. Finalmente, codifique cada siguiente nivel con un hashsum de uno anterior. Y almacena el hashsum en una cookie.
Así es como funcionaría:
En caso de que alguien cambie el número de nivel, la decodificación seguirá fallando. Y podrá determinar el nivel "correcto" tratando de decodificarlos todos 1 por 1.