La mejor forma de usar http get with php server para aplicaciones móviles

0

Estoy usando un servidor http en Amazon Web Services ejecutando php y conectándome a una base de datos RDS, también en AWS.
Estoy enviando solicitudes GET al servidor para obtener información.
Las solicitudes no contienen ninguna información privada.
Estoy tratando de pensar en la mejor manera de asegurar las solicitudes tanto como pueda dentro de las limitaciones de GET.
La razón es, obviamente, para asegurarse de que solo las solicitudes válidas lleguen al servidor.
Una forma en la que pensé fue en pasar un token que permite al servidor reconocer la solicitud como válida. Simplemente no se me ocurrió una manera de generar un token que no sea constante y que pueda ser calculado por el servidor y el cliente.
¿Hay alguna manera mejor? En general, ¿qué se considera un buen enfoque para este tipo de problemas?

    
pregunta Yinon Eliraz 04.01.2017 - 17:13
fuente

2 respuestas

1

Editar:

A la luz de la nueva información (es una aplicación móvil, solo se deben permitir las solicitudes de esta aplicación) esta publicación se actualiza. La respuesta anterior se eliminó por no ser relevante.

El OP desea, así que asegúrate de que las solicitudes se envíen desde su aplicación móvil y no a algún programa definido por el atacante. Este tipo de garantía normalmente se logra firmando digitalmente las solicitudes utilizando un certificado (clave pública y privada) en el lado del cliente y utilizando la clave pública en el servidor. Si se aplica al escenario de aplicaciones móviles, el certificado debe estar presente en la aplicación (se envía en conjunto o se transmite cuando se utiliza la aplicación por primera vez) para que se firmen las solicitudes.

Ahora suponga que el atacante desea crear sus propios mensajes para enviar al servidor. Para que estas solicitudes sean aceptadas deben ser firmadas. Para firmar esos mensajes, necesita la clave privada que está contenida en la aplicación de una forma u otra. El atacante descarga en un dispositivo controlado por el atacante. Dado que la integridad del dispositivo móvil no se puede garantizar (el dispositivo puede estar enraizado, emulado, ...) siempre hay una forma de obtener el certificado. Lo único que puede hacer es intentar que esta recuperación sea MUY difícil. La ofuscación de la aplicación puede ayudar contra el análisis estático, pero también es necesario asegurarse de que el certificado sea difícil de encontrar en la memoria en tiempo de ejecución.

Para probar la dificultad de este problema, tomemos Pokemon Go como ejemplo. A los pocos días de su lanzamiento, alguien interceptó el tráfico de la red desde la aplicación al servidor y escribió su propio programa (ejecutándose en una computadora de escritorio o portátil) que imita el comportamiento de la aplicación (enviando actualizaciones de la posición del jugador, lanzando un pokeball, etc.) que jugó automáticamente a Pokemon Go. Esto se conoce como un 'bot'. Los desarrolladores lanzan varias actualizaciones para proteger las solicitudes (supongo que también intentaron la firma digital), pero cada vez que los atacantes podían revertir la lógica y elaborar sus propias solicitudes. Lo único que realmente funcionó fue observar los patrones en las solicitudes en el lado del servidor para detectar que provenían de un 'bot' en lugar de una aplicación móvil legítima. Las cosas que habrán utilizado son el tiempo de las solicitudes (con un intervalo de diferencia de 1 segundo), la ubicación del jugador que cambia en ciertos patrones, etc. Si se suponía que un jugador estaba haciendo trampa al usar un bot, se lo prohibió. Los atacantes respondieron a esto agregando algo de aleatorización a sus solicitudes para dificultar el análisis. Así que se convirtió en un juego del gato y el ratón entre atacantes y defensores. Pokemon Go también envió cartas de cese y desistimiento a personas que podrían identificar como desarrolladores de los robots. Esto muestra cuán impotentes estaban contra el problema.

    
respondido por el Silver 04.01.2017 - 17:20
fuente
0

para su token use un hash de la hora actual, un secreto y el resto de la consulta.

    
respondido por el Jasen 05.01.2017 - 01:38
fuente

Lea otras preguntas en las etiquetas