Gestiamo un popolare gioco social e abbiamo un problema di sicurezza che sta diventando sempre più popolare in questi giorni.
Abbiamo i seguenti requisiti di prodotto:
- Non ci dovrebbe essere alcuna registrazione al gioco, è sufficiente dare le autorizzazioni di Facebook (cioè nessuna password, convalida e-mail, ecc.)
- I giocatori interagiscono tra loro usando i loro ID di Facebook con scope
- I server devono essere altamente scalabili e supportare milioni di giocatori e CCU
Purtroppo poiché l'ID di Facebook è il nostro unico modo per identificare i giocatori, questo apre il seguente exploit:
- Il mio amico ha fatto qualcosa che mi infastidisce (posso facilmente accedere al suo ID di Facebook / ID ambito)
- Creo più utenti di Facebook falsi
- Anche se questi account falsi non sono amici del mio amico, posso semplicemente inviare l'ID della vittima al server e lui lo consentirà, poiché non abbiamo modo di saperlo al momento
La soluzione "ovvia" sarebbe quella di caricare l'elenco amici del giocatore sul server al momento del login e memorizzarlo (da server a server è un grande no-no per noi + memorizzare e caricare enormi quantità di dati duplicati dal database) - o caricando la lista amici su ogni azione che interagisce con altri giocatori e assicurandosi che siano amici (il che causa molte, molte più azioni da server a server).
Stiamo cercando una soluzione a questo problema che renderà molto difficile l'utilizzo di questo exploit, senza danneggiare le nostre prestazioni e le nostre dimensioni.