Cómo evitar el acceso ilegal al servicio web

2

Permítanme comenzar diciendo que leí otras preguntas de StackExchange relacionadas con esto y que realmente no pudieron responder mi pregunta. Tengo la sensación de que esto puede ser un problema sin solución, pero me pregunto si tal vez haya un medio feliz que satisfaga mis necesidades.

Tengo una aplicación para Android. Sin embargo, no se basa en el inicio de sesión en el sentido tradicional de que los usuarios no se registran con un correo electrónico ni nada. Simplemente creamos automáticamente una cuenta para ellos con un UUID generado aleatoriamente como su "inicio de sesión" en el servicio. Para obtener este UUID, la aplicación de Android envía una solicitud a un servicio web que indica que es un usuario nuevo que acaba de instalar la aplicación. El servicio web luego devuelve un UUID que se usará para cualquier acceso adicional a la aplicación. El objetivo de esto es hacerlo para que la información específica del usuario aún pueda almacenarse en la base de datos, pero los usuarios no tienen que pasar por la molestia de crear una cuenta e iniciar sesión cada vez.

Obviamente, las solicitudes al servicio web para otras acciones están restringidas por tener un UUID válido. Sin embargo, el servicio web para crear la cuenta no tiene restricciones, lo que significa que un atacante podría enviar solicitudes GET de spam desde cualquier dispositivo para crear cualquier número de usuarios que deseen e inundar la base de datos / servidor.

Mi pregunta es, ¿cómo se puede evitar esto? Entiendo el concepto de un secreto incrustado en la aplicación de Android para acceder al servicio web, pero parece que un atacante puede obtener fácilmente cualquier secreto generado por el cliente al descompilar el APK. Otra idea fue restringir el acceso por dirección MAC, lo que significa que solo las direcciones MAC con la aplicación instalada podrían alcanzar la URL del servicio web de creación del usuario. Pero debido a la simulación de MAC, eso también parece una mala idea.

¿Existe una buena manera de tener un secreto generado por el cliente que no sea fácil de obtener al examinar el código fuente? Sé que esta es una pregunta muy difícil, pero si alguien tiene alguna idea, sería genial.

    
pregunta Daniel Hipke 04.12.2014 - 01:44
fuente

2 respuestas

0
  

Sin embargo, el servicio web para crear la cuenta no tiene restricciones,   lo que significa que un atacante podría enviar solicitudes GET de spam desde cualquier dispositivo a   cree la cantidad de usuarios que desee e inunda la base de datos / servidor.

     

Mi pregunta es, ¿cómo se puede evitar esto?

Puedes usar una combinación de restricciones de CAPTCHA e IP para evitar este tipo de ataque.

Restricciones de IP:

Una IP única puede crear un máximo de X cuentas en una cantidad de tiempo Y (Y segundos, minutos, horas, días, etc., solo puede equilibrar la cantidad correcta).

CAPTCHA:

Los CAPTCHA se usan comúnmente para evitar el registro automático de las cuentas, luego puede requerir una respuesta-desafío CAPTCHA para crear una cuenta.

Mezcle las restricciones de CAPTCHA e IP y listo.

  

¿Existe una buena manera de tener un secreto generado por el cliente que no sea fácil?   para obtener mediante el examen de código fuente?

No entendí tu pregunta.

1) Si desea proteger su servidor solo contra la inundación, la respuesta está arriba.

2) Si desea proteger los datos del usuario, de modo que nadie pueda enviar solicitudes a su servidor para obtener la información del usuario con UUID X, puede crear un token aleatorio específico para un UUID al crear la cuenta y puede almacenarlo. en una base de datos cifrada en Android.

EDIT:

Vea el nuevo "No CAPTCHA reCAPTCHA".

enlace

Sin dolor para sus usuarios, efectivo para usted.

    
respondido por el Lucas NN 04.12.2014 - 04:13
fuente
-1
  

Sin embargo, no se basa en el inicio de sesión en el sentido tradicional que los usuarios    no te registres con un correo electrónico ni nada . Simplemente creamos automáticamente   una cuenta para ellos con un UUID generado aleatoriamente como su "inicio de sesión"   al servicio.

Si solo le está permitiendo a CUALQUIER usuario crear una cuenta con su aplicación, sin proporcionar información personal, es muy probable que su aplicación sea spam con una gran cantidad de solicitudes para crear nuevos usuarios.

  

El objetivo de esto es hacerlo para que la información específica del usuario pueda   aún se puede almacenar en la base de datos , pero los usuarios no tienen que pasar por   la molestia de crear una cuenta e iniciar sesión cada vez.

En realidad, esto es un poco confuso. ¿Qué es exactamente esta información específica del usuario? ¿De dónde vino si el usuario nunca se registró con su aplicación? Si es algo único, como un ID de correo electrónico o un número de teléfono asignado con el UUID asignado por el usuario, esta información única se puede usar para una autenticación de desafío-respuesta simple, que esencialmente puede detener la estafa. El hecho de que su aplicación permita a los usuarios registrarse, sin proporcionar información personal (que es única y se puede usar para autenticar a ese usuario en el futuro), hace que su aplicación sea vulnerable a dicho ataque de spam.

    
respondido por el Rahil Arora 04.12.2014 - 02:55
fuente

Lea otras preguntas en las etiquetas