entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Seguridad de servicios web

Tengo una duda respecto a la seguridad de una app que pretendo desarrollar.

Quiero desarrollar una APP en Angular o Backbone, con servicios web. Mi pregunta es como hago para que solo las app puedan acceder a esos servicios y no cualquier persona que se meta en mi código, no se si queda clara la duda.

Si el código lo ejecutara en el servidor no hay problema, pero como estas app son todo el código en el lado del cliente me llama la atención.

Saludos

2 Respuestas

1voto

mrczrt Puntos6940

Hola que tal, cualquiera puede acceder a cualquier servicio simulando ser tu app nadie se salva de esto por ejemplo WhatsAPP, con esta API puedes espiar y simular ser la APP móvil :

https://github.com/venomous0x/WhatsAPI

Basicamente cualquier servicio que conecte punto a punto y sobre todo atravéz de una red publica como lo es internet es suplantáble, lo que si puedes hacer es aumentar el nivel de seguridad en el trafico de tus conexiones, y validar las llamadas a tus servicios para evitar cosas como el CSRF o un XSS por mencionar algunos.

Saludos.

0voto

elias_leyton comentado

Mira el servicio de gmail al registrar un correo nuevo, si te das cuenta hace una llamada para ver si el nombre de correo esta usado antes o no, pero no se puede simular desde otra parte.

Que usa Gmail?

0voto

mrczrt comentado

Lo máximo que puede hacer gmail es usar una verificación humana osea captcha, tiempo entre llamadas al server y algunas llaves en los headers para validación inclusive una conexion paralela de websocket, por que tanto la mac, agente de cliente, cookies... etc etc pueden ser suplantados, yo lo hacia todo el tiempo con mi facebook cuando el api graph no me daba ciertas cosas.

Toma en cuenta que un server no puede usar jamas algo extra que un navegador no le pueda proporcionar :

Cookies, LS, SS, Agent, Request Headers, WS, IP, MAC, javascript y actualmente webRTC.

2votos

Leonardo-Tadei Puntos227320

Hola Egoitz,

si bien por su naturaleza, toda llamada HTTP se puede realizar desde cualquier dispositivo, hay formas válidas de limitar el uso por terceros:

  • no basar la seguridad en un secreto, como podría ser el creer que si no se conoce la URL de la llamada nadie la usará.
  • usar HTTPS, para que sea muy dificil sacar conclusiones de cómo funciona viendo el tráfico.
  • autentificar la APP como si fuera un usuario. Si la APP tiene un usuario y contraseña que se gestiona para cada dispositivo que la use, podrás detectar tráfico inusual.
  • si no se autentifica por usuario, negociar un token que el servidor entregará y que dará contexto a la conexión. Es relativamenet simple enviar un dato del dispositivo para negociar el token y así detectar o bloquear tráfico indeseado.
  • al menos tener un token grabado en la app y pasárselo a cada consuta a la API. Confiarás solo en las peticiones que tengan ese dato y es dificil de descubrir si se usa HTTPS.
  • si las peticiones no son válidas (no respetan el protocolo de la API) devolver un HTTP 404 para que parezca que nadie responde a esa llamada en vez de mostrar que es inválida.

Dependiendo de la naturaleza de la app, se pueden usar varias o todas estas alternativas a la vez.

Saludos!

0voto

mrczrt comentado

Hola Leonardo. todo esto solo aumenta la seguridad, pero ninguna evita que sea usado por terceros, con un proxy enfrente obtienes el token, el usuario y contraseña del APP... bueno ni usando hmac, salt o VI puedes evitar el uso por terceros, en el caso de https, si el proxy mira el inicio de la negociacion HTTPS puede determinar el inicio de la negociacion y la seleccion de protocolo de encryptacion y bueno obviamente tiene acceso a la llave publica...

Creo que en cualquier caso se puede extraer todo el protocolo con cualquier servidor de cualquier tipo...

Leonardo dijo algo muy cierto : la mejor manera puede ser mirando el trafico y el uso de tu servicio...

Y todo esto para que termine aplicandolo a un APP tipo candycrush jajaja.

0voto

Leonardo-Tadei comentado

Hola Marcos,

tal y como decís, solo aumenta la seguridad, pero no impide el uso, por eso decía "..toda llamada HTTP se puede realizar desde cualquier dispositivo, hay formas de válidas de limitar el uso por terceros"

No estoy de acuerdo contigo en que ver el inicio de una negociación HTTPS sirva para poder ver el tráfico, ya que no se enviará ningún dato durante la negociación, los proxy manjan esta comunicaciones dentro de un tunel y para ver datos hay que recurrir a un atanque Man-in-the-Middle haciéndose pasar por el servidor destino.

Igual, lo que necesita Egoitz es no gastar ancho de banda innecesario más que ofuscar a agentes de la NSA ;-)

Saludos!

0voto

mrczrt comentado

Tiene usted toda la razon, el punto es que se pueden generar 2 conexiones https server-nodejs y nodejs-app talvez me falto mencionar eso :D

Creo que lo mejor es que el server este en localhost y que las APPs apunten a 127.0.0.1 jeje

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta