Este es un tipo de transacción bastante estándar. Por mucho, lo más importante es que realice la transacción completa en el servidor , no en el cliente; No puedes confiar en el cliente. Para que las cosas funcionen bien para un usuario final, puede ejecutar estas transacciones en el cliente, pero no pueden ser definitivas hasta que el servidor las haya verificado.
También, asegúrese de realizar todo el proceso en una transacción de base de datos. Si resta 10 puntos al usuario A, luego no los agrega al usuario B por alguna razón, el usuario A estaría bastante enojado si no recuperara sus 10 puntos; es aún peor si sucede en la otra dirección, ya que los usuarios pueden jugar con el sistema para generar puntos gratis.
Una cosa que puede o no puede preocuparte es ataques de repetición . Imagina que estás en mi red y te conecto al servidor mientras haces una transacción para darme 10 puntos; luego, luego reenvío esa misma solicitud HTTP varias veces más para vaciar su cuenta. Hay algunas contramedidas diferentes que puede tomar , pero debería poder apoyarse en TLS para evitar esto.
Lo que me recuerda, absolutamente todo el tráfico que envía una sesión (o posiblemente, todo el período de tráfico) debería pasar por HTTPS. Esto evita una serie de problemas, como el anterior y los ataques de secuestro de sesión . Ya mencionaste esto, pero pensé que debería re-iterarlo.