Questo è un tipo di transazione piuttosto standard. Di gran lunga, la cosa più importante è che tu esegua l'intera transazione sul server , non sul client; non puoi fidarti del cliente. Per far sì che le cose funzionino bene per un utente finale, puoi eseguire queste transazioni sul client, ma non possono essere definitive finché il server non le ha verificate.
Inoltre, assicurati di eseguire l'intera operazione in una transazione di database. Se sottrai 10 punti dall'Utente A, quindi non riesci ad aggiungerli all'Utente B per qualche motivo, l'Utente A sarebbe piuttosto arrabbiato se non recuperasse i suoi 10 punti; è anche peggio se succede nella direzione opposta, dato che gli utenti possono giocare al sistema per generare punti gratuiti.
Una cosa che potresti o meno preoccupare sono gli attacchi di replay . Immagina di essere sulla mia rete e io MitM la tua connessione al server mentre fai una transazione per darmi 10 punti; quindi, in seguito, invio nuovamente la stessa richiesta HTTP diverse volte per drenare il tuo account. Ci sono alcune contromisure che puoi prendere , ma dovresti essere in grado di appoggiarti a TLS per impedirlo.
Che mi ricorda, assolutamente tutto il traffico che invia una sessione (o probabilmente, tutto il periodo di traffico) dovrebbe andare su HTTPS. Ciò impedisce una serie di problemi, come gli attacchi precedenti e per l'hijack delle sessioni . Lo hai già detto, ma ho pensato di doverlo ripetere iter.