Iniciar sesión

Ver la versión completa : Programación WebService más consulta desde iOS o Android



cdrman
12/02/2014, 12:57
Hola,

Tengo programado un pequeño webservice en asp.net. Funciona correctamente, hago consultas desde una aplicación móvil iOS y una de Android. Hasta ahí todo correcto pero se me plantean diversas dudas acerca de la seguridad. Un usuario con un proxy podría interceptar las llamadas al webservice y utilizar los servicios para obtener información, información que interesa que solo la pueda leer mi app.

He pensado en hacer alguna especie de autenticación y enviarlo todo cifrado por SSL, pero claro, al ser un servicio en el cual mis usuarios no se van a registrar sólo habrá una clave maestra para conectarse y si alguien la pillara ya habría accedido a las lecturas del webservice. Lo suyo sería una clave por usuario pero me va a resultar imposible porque los usuarios no se van a registrar.

A alguno se le ocurre algo de como lo podría hacer¿?

Gracias!

juanvvc
12/02/2014, 13:22
He pensado en hacer alguna especie de autenticación y enviarlo todo cifrado por SSL, pero claro, al ser un servicio en el cual mis usuarios no se van a registrar sólo habrá una clave maestra para conectarse

En SSL no hay "clave maestra", así que nadie entre medias va a pillar nada.

Cuando se realiza una conexión SSL, lo primero de todo es ponerse de acuerdo con una clave de sesión. Esa clave solo se usa en esa sesión y cambia en cada conexión. Así que aunque consigas la clave de una sesión (aunque ya me explicarás cómo), no te va a valer para nada.

Releyendo, creo que lo que quieres es autenticar al usuario pero sin pedirle que se registre. Puedes hacer un registro "en la sombra sin que se entere el usuario". Por ejemplo, usando su número de teléfono automáticamente como su identificador. Esto es lo que hace whasapp y tantos otros. No es que sea muy seguro, pero quizá ya te valga. Además si el usuario cambia de terminal cambiará también su identidad.

Para tener un poco más de seguridad y permitir al usuario cambiar de terminal, no se me ocurre más solución (práctica) que exigir registro.

cdrman
12/02/2014, 13:27
No me he explicado bien. Sé que no hay clave maestra. Si realizo una conexión SSL al webservice el usuario (harker :-) ) no verá que parámetros estoy enviando ya que todo el tráfico estará codificado, pero para el usuario le será tan fácil como saber la url web webservice e intentar conectarse a través del navegador e indagar un poco, es decir, tendría que implementar otra autenticación, además de consultar el webservice mediante ssl.

Lo que no quiero es que los usuarios puedan consultar el webservice sin validación, pero no quiero utilizar un mismo password para todos.

amkam
12/02/2014, 14:41
Lo que propones es establecer un sistema de seguridad ante "man in the middle" y para evitar estos ataques se usan certificados sobre https que es a mi modo de ver como deberías solucionarlo.

Si optas por una opcion más casera se me ocurre (sin saber mucho sobre seguridad) que puedes hacer algo similar y es si estableces algún tipo de sistema de seguridad basado en clave pública y privada de manera que cada nueva instalación de una aplicación pida una clave privada al servidor y uses esa clave para cifrar y autorizar las comunicaciones.

Esto no es la panacea, pero puede evitar un gran porcentaje de los problemas de seguridad. Seguirán podiendo acceder a los datos si conocen la clave privada, pero una vez que esté ya instalada la aplicación, será muy segura a no ser que reinstalen la aplicación y lean la nueva clave privada o tengan algún acceso al almacén de la clave privada (que también tendrás que proteger). Por otro lado tendrás que publicar un nuevo servicio para proporcionar claves a las nuevas instalaciones de la aplicacion.

^MiSaTo^
12/02/2014, 14:53
Venía a decir lo mismo que amkam, usa un certificado sobre ssl y asegúrate que lo que uses en los móviles verifique que el certificado es correcto en todo momento. Te lo digo porque gracias a un bug de Microsoft, en la app de windows phone se podía hacer una ataque man in the middle porque el SDK de Windows Phone no verifica el certificado en todo momento y nosotros creíamos que sí.

-----Actualizado-----


En SSL no hay "clave maestra", así que nadie entre medias va a pillar nada.

Cuando se realiza una conexión SSL, lo primero de todo es ponerse de acuerdo con una clave de sesión. Esa clave solo se usa en esa sesión y cambia en cada conexión. Así que aunque consigas la clave de una sesión (aunque ya me explicarás cómo), no te va a valer para nada.

Releyendo, creo que lo que quieres es autenticar al usuario pero sin pedirle que se registre. Puedes hacer un registro "en la sombra sin que se entere el usuario". Por ejemplo, usando su número de teléfono automáticamente como su identificador. Esto es lo que hace whasapp y tantos otros. No es que sea muy seguro, pero quizá ya te valga. Además si el usuario cambia de terminal cambiará también su identidad.



whatsapp usa el número de teléfono como usuario pero no por ello cambia tu identidad por cambiar de terminal. Lo que pasa es que como password se usa el identificador del terminal (UUID en Android, MAC en iOS) y por eso si cambias de terminal (pero no de número) tienes que volver a "activar" whatsapp (con el código del sms), porque estás cambiando tu password. El usuario sigue siendo el mismo ;)

cdrman
12/02/2014, 19:52
Gracias a todos por los aportes. Estoy pensando como hacerlo... lo malo es que la app ya está en marcha y tendré que hacer bastantes cambios en todo. Más que nada lo que yo quería es evitar que algún usuario se aproveche de los datos de mi webservice, es decir, que solo mi app pueda conectarse a este webservice.