[Android] Conectar a webservice y cifrar conex

willy_chaos

Hola a todos estoy pensando en hacer una app para Android que se conecte a un webservice (que mas adelante creare). Pero me gustaria que nadie con un Whireshark pudiera ver la URL del webservice o bien si la ven que los datos esten cifrados.

Podria conectar desde la app al mysql directamente pero prefiero no usar esa opcion. La idea es que el servidor web genere un HTML con JSON cada x horas automaticamente asi no sobrecargar el servidor con peticiones tontas.

Pero me interesa que no se puedan ver o descifrar esos datos. Habia pensado en cifrarlos mediante algun algoritmo y luego pasarlos por JSON y que en el webservice se vean datos cifrados.

Alguien con experiencia en webservices?

ke2g

Si el web service es una API REST, puedes hacer peticiones por https, todo la petición ira cifrada. Si quieres usar SOAP igual.

1 respuesta
freskito24

Como bien dice #2 https + REST + json es la mejor opción. Todo va cifrado (url incluida) excepto lógicamente el nombre del dominio.

Puedes montar el backend rápido con https incluido desde appengine o máquina de amazon si quieres más control.

Ni se te ocurra usar SOAP en Android, es francamente asqueroso tanto para el cliente (parseo) como para el servidor (30 millones de parafernalias inútiles).

zoeshadow

La manera de proteger tus web services no es ocultando la URL, sino bloqueando todas las conexiones que no quieras en el "Frontend" ( Apache/Ngingx ) del servidor que hostea los web services.

Cómo saber que conexiones quieres y cuales no?, autorización.

Una manera interesante de autorizar ciertos dispositivos a hacer peticiones a un web service, es mediante una clave pública + una privada, oauth, que es el estandar más usado hoy en dia funciona así, pero quizás sea sobrecomplicar cosas si a tus servicios solo van a llamar aplicaciones desarrolladas por tí.

La idea es que el cliente tenga que mandar algún tipo de dato que le identifique y que tu en el servidor puedas aceptar o no esa petición basada en ese dato.

Eso, sumado a HTTPS hace tus servicios bastante más seguros..

LLoid

Échale también un vistazo a Parse.com para montar un backend. Es gratuito (al principio), te protege los ws y te ayuda considerablemente a la hora de implementar el acceso a datos, gestión de usuarios (login con facebook, twitter, email+pass, etc).

Yo lo estoy usando y me tira bastante bien.

Si decides que te lo quieres hacer a mano, a mí personalmente oauth 2.0 me parece un lío de cuidado, así que estaría bien mandar en cada petición (aparte de la encriptación que te han dicho antes etc) el id único del dispositivo, el email de la cuenta de google del dispositivo, y quizá algún id de aplicación (tendrías que cifrar el apk con proguard).

Una buena librería para hacerlos SOAP es ksoap2, tiene la ventaja de que hay bastantes ejemplos por internet y empezar con ella es fácil. Tiene alguna cosa puñetera pero en general va bastante suave.

glolg

#1 yo recientemente he realizado un proyecto que hace las conexiones mediante peticiones a un web service REST y he usado https para el cifrado, no obstante no estás a salvo y te sugiero que añadas varias capas de seguridad como capar por user-agent como te han dicho arriba e incluso crear un checksum según alguno de los valores de la aplicación android para verificar que viene la petición desde allí. Piensa que pueden de forma muy fácil acceder al código de tu aplicación android, hay miles de prácticas por la red: aquí un ejemplo