JSON: rechazar solicitudes de servidor de terceros

Tengo la intención de utilizar JSON para implementar una comunicación de servidor de cliente. Mi objetivo es que un servidor Java reciba datos a través de HTTP-Post desde una aplicación de Iphone.

Me preocupa el hecho de cómo puedo estar seguro de que los datos que recibe el servidor Java solo provienen de la aplicación Iphone. ¿Es posible que alguien más esté captando la URL del servidor Java y envíe datos manipulados?

¿Tengo la oportunidad de reconocer eso? SSL encripta solo los datos transferidos, pero no resuelve el problema, creo.

Saludos cordiales

tormenta

Respuesta 1

Puede utilizar el cifrado de clave pública, ya que los usuarios tienen sus propias claves y realizar un seguimiento de quiénes son los usuarios legítimos. Este es el esquema más confiable que se me ocurre. Eso, o dar a cada usuario un nombre de usuario y contraseña. Sin embargo, probablemente sea mucho más problema de lo que vale, y todavía no protege contra los usuarios que se han registrado con usted pero que aún son maliciosos.

Insertar un token en su aplicación y luego enviarlo con solicitudes, como sugiere Cyprian, es probablemente el esquema más fácil y probablemente funcionaría bastante bien, pero podría ser relativamente fácil realizar ingeniería inversa.

Una solución algo mejor podría ser programar en su aplicación una función que transforme cualquier entrada dada en una salida; luego, su servidor responde a una solicitud dándole a la aplicación un dato para transformar y verifica el resultado. Un cliente que pasa la prueba obtiene un token de sesión que le permite continuar. Sin embargo, esto requiere un viaje de ida y vuelta adicional para la autenticación. Y todavía no es inmune a la ingeniería inversa, ya que toda la información necesaria para hacerlo se almacena en la aplicación que está presente en la máquina del usuario.

Respuesta: 2

Suponiendo que pueda proteger razonablemente su aplicación iOS para que no se desarme, puede usar "solicitudes firmadas" como la API de Facebook (y probablemente otras):

Necesitará un secreto compartido tanto en el cliente como en el servidor (por ejemplo, una cadena aleatoria / matriz de bytes). Luego, la aplicación de iOS analiza todos los parámetros de solicitud más el secreto compartido y agrega el hash como parámetro de solicitud adicional, por ejemplo, se myserver.com/ws?item=123&cat=456convierte en myserver.com/ws?item=123&cat=456&hash=1ab53c7845f7a. Al recibir una solicitud, el servidor vuelve a calcular el hash de los parámetros regulares y el secreto compartido y lo compara con el sigparámetro de valor . Si ambos son iguales, la solicitud se considera válida (suponiendo la integridad de su aplicación iOS).

Una ventaja de este método es que no requiere viajes de ida y vuelta adicionales para obtener tokens únicos de prevención de CSRF y no requiere cifrar solicitudes y respuestas (siempre y cuando solo le importe la integridad de las solicitudes, no la confidencialidad) .

Respuesta: 3

Estoy tratando de inspeccionar una aplicación Java usando VisualVM. Normalmente no hay ningún problema, pero estoy tratando de configurar el tejido Eclipselink y, por lo tanto, estoy comenzando el programa usando el indicador -javaagent; -...

Necesito vincular a un máximo de 8 variables. Cada uno de ellos podría ser nulo. ¿Hay alguna forma recomendada de lograr esto? Sé que podría simplemente verificar nulo, pero esto parece tedioso. Adicional ...

Actualmente tengo un paquete de recursos para todos los elementos establecidos en mi GUI. Mi aplicación permite la adición de nuevos componentes (como en botones personalizados (no nuevos componentes de oscilación)) [que pueden tener ...

Cuando estoy creando una nueva base de datos H2 a través de ORMLite, el archivo de la base de datos se crea, pero después de cerrar mi aplicación, todos los datos que almacenó en la base de datos se pierden: JdbcConnectionSource connection = ...