Estamos ejecutando un juego social popular y tenemos un problema de seguridad que se está volviendo más y más popular en estos días.
Tenemos los siguientes requisitos de productos:
- No debe haber registro en el juego, solo es suficiente con dar permisos de Facebook (es decir, sin contraseña, validación de correo electrónico, etc.)
- Los jugadores interactúan entre sí utilizando sus ID de Facebook con ámbito
- Los servidores deben ser altamente escalables y admitir a millones de jugadores y CCU
Desafortunadamente, dado que la ID de Facebook es nuestra única forma de identificar a los jugadores, esto abre la siguiente vulnerabilidad:
- Mi amigo hizo algo que me molesta (puedo acceder fácilmente a su ID de Facebook / ID de ámbito)
- Creo varios usuarios de Facebook falsos
- A pesar de que estas cuentas falsas no son amigas de mi amigo, simplemente puedo enviar la identificación de la víctima al servidor y él lo permitirá, ya que no tenemos forma de saber esto en este momento.
La solución "obvia" sería cargar la lista de amigos del jugador en el servidor al iniciar sesión y almacenarla (de servidor a servidor es un gran no-no para nosotros + almacenar y cargar una gran cantidad de datos duplicados de la base de datos) - o cargar la lista de amigos en cada acción que interactúa con otros jugadores y asegurarse de que sean amigos (lo que provoca muchas, muchas más acciones de servidor a servidor).
Estamos buscando una solución a este problema que, al menos, hará que sea muy difícil utilizar este exploit, sin perjudicar nuestro rendimiento y escala.