¿Cómo se puede proteger una API web para una aplicación móvil del acceso no autorizado?

1

Tengo una API web de solo lectura para usar con una aplicación móvil. No hay inicios de sesión de usuarios, solo búsquedas realizadas en una API y un conjunto de resultados devueltos.

NOTA: no se trata de que los USUARIOS inicien sesión, ya que las preguntas que puedo encontrar son solo un inicio de sesión para toda la API, solo para confirmar que en realidad es nuestra aplicación iOS la que accede, y no una aplicación de Android. que alguien más hizo y está usando nuestra API.

Me gustaría que solo mi aplicación pueda acceder a la API. Aunque los datos son públicos, no quiero que nadie pueda utilizar la API.

Iba a agregar una verificación de clave básica para ser enviada con cada solicitud, como hacen muchas API, un simple key=sjetow3vthw3iulbtq4wv en la solicitud y la verifico, pero entiendo que las claves no se pueden almacenar de forma segura en las aplicaciones de iOS , como en absoluto ...?

¿Es esto imposible de lograr? Diga un sitio web como Booking.com y su aplicación para iOS: seguramente no puede ser correcto que no haya protección en su API, ¿y alguien podría desarrollar una aplicación en su API? ¿Pueden ser asegurados en absoluto?

Gracias

    
pregunta samiles 27.10.2016 - 14:15
fuente

3 respuestas

1

Cualquier secreto que pueda tener en una aplicación móvil se pierde para el usuario. No se puede asegurar nada de lo que se le da al cliente. Por otro lado, una solicitud a su API es la misma desde cualquier fuente. El cliente puede enviar cualquier cosa.

Teniendo en cuenta estas suposiciones, es imposible que su API solo funcione con su cliente. Cualquiera puede extraer cualquier identificador de su cliente y crear otra aplicación con los mismos identificadores o secretos para consultar su API, y no tiene forma de saber quién (qué pieza de software) es la persona que llama.

Y a partir de aquí, creo que probablemente sea una pregunta legal, puede crear los Términos de servicio adecuados para evitarlo y hablar con los abogados sobre lo que se puede hacer para obtener protección legal.

Técnicamente, lo mejor que puedes hacer es usar las claves de la API, por lo que incluso si no quieres identificar usuarios individuales, puedes hacer que creen claves de la API para que se conecten a tu API. De esta manera, al menos podría controlar y posiblemente prohibir las claves de API que cree que están en contra de su ToS, y también podría negar la emisión de una nueva clave de API a los usuarios ofensivos. Pero para esto, también necesitarías instalaciones para intentar averiguar quiénes son esos usuarios (qué claves de API, técnicamente), y eso no será una ciencia exacta.

    
respondido por el Gabor Lengyel 27.10.2016 - 14:25
fuente
0

Lo que necesitaría para almacenar algunos secretos en el cliente de manera que el cliente no pueda hacer mal uso ni copiar estos. Luego, estos secretos se utilizan para firmar los mensajes para que sepa que provienen de un cliente de confianza.

Hay formas de hacer esto con hardware protegido contra manipulación indebida, como tarjetas inteligentes o dongles. No hay forma de hacer esto en el software solo mientras el usuario tenga al menos tanto control sobre el sistema como la aplicación que es el caso de los teléfonos con jail rota, etc. Porque, independientemente de la aplicación, el usuario también podría hacerlo dentro de su propia aplicación al replicar el comportamiento.

Esto significa que, a menos que envíe un hardware especial a cada usuario, su única opción será probar la protección limitada mediante la ofuscación del código y protegerlo un poco contra la ingeniería inversa.

    
respondido por el Steffen Ullrich 31.10.2016 - 10:11
fuente
0

No hay manera de identificar una aplicación, ya que requeriría un secreto que solo la aplicación conoce. Pero una vez que está en el código o en un archivo de datos de la aplicación, es vulnerable a la ingeniería inversa. La única protección que tiene es únicamente la ofuscación, y todos sabemos que la seguridad mediante la ofuscación no es ... segura.

Si realmente desea proteger su API sin molestar demasiado a sus usuarios con contraseñas, asigne un ID único a cada usuario legítimo de su aplicación y autentíquelos a través de una clave asimétrica. Esto es lo mejor que puede hacer, y todos los navegadores en cualquier plataforma tienen disposiciones para administrar certificados de clientes de manera transparente para el usuario.

    
respondido por el Serge Ballesta 28.02.2017 - 23:23
fuente

Lea otras preguntas en las etiquetas