REST API: ¿tiene sentido asegurar la primera llamada con un CAPTCHA?

4

Supongamos que tengo una aplicación iOS / Android que se basa en una API REST personalizada para cosas como la administración de cuentas (registro, inicio de sesión, restablecimiento de contraseña, obtención / configuración de datos relacionados con el usuario).

No hay una buena manera de garantizar que solo se llame a mi API desde mi aplicación móvil. Oauth2 y similares con 'secreto' en el código del cliente pueden ser fácilmente diseñados por ingeniería inversa.

Digamos que tengo una llamada a la API como esta:
enlace

Esto crea un nuevo usuario y, a partir de ese momento, todas las llamadas a la API incluirán un token de sesión o algo que vincule la llamada a la API con un usuario específico de la aplicación.

Esta primera llamada de registro es la única que no está protegida por nada y lo que me preocupa es que una persona maliciosa la llame 1.000.000 veces desde un script de PC para crear muchos usuarios falsos, especialmente con direcciones de correo electrónico reales. Entonces, las personas con estas direcciones no podrán utilizar la aplicación.

¿Cómo puedo proteger esa primera llamada a la API para evitar el uso indebido masivo? Estoy pensando en incluir un CAPTCHA compatible con dispositivos móviles validado por el servidor en el formulario de registro de usuario.

Nuevamente, todas las llamadas API subsiguientes están protegidas con token de sesión y el conteo de llamadas API monitoreado por usuario (las sospechosas están bloqueadas).

Se trata de diseñar la API de tal manera que incluso si se usa desde un cliente intrínsecamente inseguro como un teléfono móvil, todavía está bien. Básicamente, incluso si la API se hiciera completamente pública, nadie podría hacer mucho mal. Así que aquí la pregunta se centra en proteger esa primera llamada a la API, pero también se trata de resolver un problema más general.

Parece que otras alternativas interesantes incluyen el uso de la validación de correo electrónico o un proveedor sólido de identidad de terceros como Google y similares. Ninguna de estas 3 opciones es perfecta. De todos modos, interesado en la discusión en torno a este tema.

¿Eso tiene sentido? ¿Estoy complicando demasiado las cosas?

    
pregunta MikaelW 11.08.2014 - 13:21
fuente

1 respuesta

5

El enfoque estándar para esto sería enviar un correo electrónico al usuario para confirmar la cuenta y, si esto no ocurre en un período de tiempo predefinido, eliminar el registro.

Puede combinar esto con un poco de detección de anomalías, por ejemplo, si obtiene un gran número de registros de una sola dirección IP, puede suponer que esto es hostil y bloquear esa dirección IP. No es perfecto contra un atacante determinado, pero podría disuadir a los menos determinados.

También podría agregar algo como un CAPTCHA al proceso de registro, de nuevo, esto podría disuadir a los atacantes menos determinados, pero hay varias formas de evitarlos, como los servicios de finalización de CAPTCHA que son relativamente económicos, por lo que un atacante determinado podría evitarlos. .

¿Cuál de estos son razonables en gran medida depende del perfil de riesgo / amenaza de su aplicación?

    
respondido por el Rоry McCune 11.08.2014 - 17:56
fuente

Lea otras preguntas en las etiquetas