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

1voto

Proteger Web Service

Tengo un panel de administración en PHP, y tengo una parte donde carga un JSON generado por la misma aplicación, con lo cual despliego datos en tiempo real, supongamos que la dirección, es miapp.com/servicio.json. Como hago para que solo la app desde la vista acceda a ese servicio? y no otra persona que pueda llegar a conocer la dirección?

Pd: Anteriormente me respondieron algo que aplicaba pero no era la solucion mas precisa o mas profesional, me gustaria saber la manera correcta de hacer esto.

Saludos

2 Respuestas

3votos

Leonardo-Tadei Puntos227320

Hola Elías,

el protocolo HTTP tiene como una de sus características que no tiene estado, es decir, las peticiones no se responden en el contexto de una "conexión", como lo hace por ejemplo los protocolos FTP, IMAP o POP3 entre otros, en los que una vez que conectaste, todo el tráfico se desarrolla en el contexto de una conexión, y dicha conexión identifica unívocamente al usuario.

En HTTP tenés que implentar vos algún mecanismo para simular una "conexión", ya que el protocolo no la implementa. La opción más simple para mantener una conexión en PHP es con sesiones, tal y como te dice @lladruc, pero esto implicaría que para iniciar la sesión, primero deberías tener un mecanismo para que la aplicación que consume se identifique con el WebService.

Si estás en el escenario de una webapp, deberías tener almacenada en ella el usuario y contraseña o un token o un identificador de algún tipo, para que el WebService lo reciba y valide y solo si es válido devolver el JSON.

Ahora bien, si estás enviando todo esto por GET en un servidor HTTP, ver la petición GET con el usuario/clave o token la primera vez es bastante simple. Tu WebService debería estar sobre HTTPS para que todo esto no sea una pérdida de tiempo.

Una vez validado el usuario/aplicación, el mecanismo de las sesiones tal vez te sea suficiente. En realidad las sesiones son duplicables con un poco de esfuerzo.

Otra solución completamente distinta es que no respondas con un JSON, sino con contenido cifrado, y que tu aplicación que consume el servicio lo descifre antes de usarlo: de esta manera puedo acceder y ver la respuesta, pero al ver el contenido parecerá basura.

Saludos cordiales!

1voto

lladruc comentado

tal y como dice @Leonardo Tadei, puedes tirar de RSA (SSH), o bien encriptando.

En ambos casos hay una librería de JS que te permite trabajar con cifrados de baja dificultad.

http://www.movable-type.co.uk/scripts/aes.html

En esta web encontrarás información sobre el algoritmo AES, así como su uso.
Puedes utilizar AES para encriptar un token (de tal forma que si usas un app para plataforma Android, iOS o cualquier sistema cliente quedará oculta), o bien, como dijo @Leonardo Tadei (también), cifrar el mismo resultado de Json antes de mandarlo.

El problemilla que tendrás con las claves RSA, es que vas a necesitar un certificado, y a menos que tu proveedor de host te conceda el certificado o te de acceso por Shell al mismo servidor, es prácticamente imposible hacerlo decentemente.

0voto

Leonardo-Tadei comentado

Gracias por el enlace a la biblioteca de cifrado en JS, @marcel_olsina !

Me parece muy útil para usarla en aplicaciones que embeban JS o que le pidan la contraseña de descifrado al usuario.

1voto

lladruc Puntos760

La manera mas adecuada creo que sería usando una "session".

 <?php
    if(isset($_SESSION['id'])){
        echo $codigoGeneradoporJSon;
    }else{
        echo 'ERROR 401 Unauthorized';
    }
?>

Para que este código funcione tienes que hacer que tu app loguee en el servidor de alguna forma, mi recomendación es usar claves públicas/privadas tipo RSA.
Dependiendo de la sensibilidad de la información puedes usar claves de 512,1024,2048 o 4096 bits.

Espero haberte sido de ayuda.

0voto

elias_leyton comentado

Me podrias dar algun link de referencia sobre el tema de de llames publicas/privadas RSA aplicado a lo que me comentas?

Saludos

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