Asegúrese de que los datos provienen del servidor

4

Entonces, una aplicación web toma datos de un servidor con ajax. Me interesa saber si hay algún asistente de criptografía que asegure que los datos provienen de ese servidor. Por ejemplo, alguien puede editar su archivo de hosts y usar un servidor diferente para el dominio y pasar datos diferentes a la aplicación web sin modificarlo.

Estoy pensando en algo como esto:

Server:
data_to_send // stringified json
integrity_code = getCode(data_to_send); //generates a code from the string.

The server outputs data_to_send and integrity_code

Then the client 
if (checkCode(data_to_send, integrity_code))
  //all fine

Soy un novato en la criptografía, pero la idea es tener un algoritmo secreto en el servidor que nadie pueda ver y un algoritmo público en el cliente que determine si los datos son integrales. ¿Se puede hacer algo así?

    
pregunta Maciej Krawczyk 09.02.2017 - 00:24
fuente

3 respuestas

2

La solución más sencilla es implementar el cifrado TLS y utilizarlo al consultar el servidor. El tráfico TLS entre el servidor y el otro servidor que aloja su aplicación web se cifrará y la autoridad del servidor se validará correctamente. Sin embargo, tener instalado SSL / TLS no significa automáticamente que su aplicación lo esté utilizando, aún tiene que cambiar las URL de punto final de http:// a https:// en sus solicitudes de ajax.

Editar: pragmáticamente, recomiendo letsencrpyt si usas linux, no es más de 5 minutos instalarlo para apache o nginx.

    
respondido por el Rápli András 09.02.2017 - 00:52
fuente
0

Si el usuario de su sistema está motivado para subvertir el lado del cliente de su sistema, entonces hay poco que pueda hacer. Los sistemas de gestión de derechos digitales (DRM) intentan hacer algo similar, con un éxito limitado.

Si se puede evitar este camino, se debería evitar.

    
respondido por el Sunil Agrawal 09.02.2017 - 00:31
fuente
0

Como se mencionó en otra respuesta, TLS (HTTPS) incluye autenticación, que está destinada a proporcionar el tipo de garantía que está buscando. También hay una variedad de otras herramientas criptográficas para el problema más general; GPG es una herramienta de firma común para correo electrónico, por ejemplo.

Sin embargo, aunque su instinto de no confiar en que el servidor que está consultando es el correcto es correcto, no lo ha llevado lo suficiente. Por lo general, debe asumir que cualquier código que se ejecute en el cliente puede ser subvertido por completo, por lo que si un atacante lo desea, solo puede cambiar el código para que no haga ninguna solicitud y solo use algunos valores codificados que ellos quieren.

En los modelos cliente-servidor, como las aplicaciones web y los juegos en línea, la forma de evitar esto es verificar siempre las acciones en el servidor. Todavía puede hacer cálculos en el cliente, pero nunca considerarlos de confianza; Todo tiene que ser verificado por el servidor antes de que se considere verdad. No sé qué está haciendo tu aplicación específicamente, pero para proporcionar un ejemplo de comercio electrónico, no puedes confiar en que el cliente te diga que ha pagado por algo; el servidor debe realizar el proceso de pago (o enviarlo a un servicio externo de confianza para hacerlo), y solo a continuación procede a enviarles su artículo.

    
respondido por el Xiong Chiamiov 09.02.2017 - 01:43
fuente

Lea otras preguntas en las etiquetas