Cómo garantizar que solo mi aplicación de una sola página pueda realizar solicitudes a una API

1

Tengo una API REST que potencialmente puede servir a múltiples clientes web.

Quiero asegurarme de que solo mi aplicación de una sola página en my-one-and-only-web-cleint.com pueda realizar solicitudes a mi API. ¿Cómo hago esto?

En este momento no hay mucho que impida que alguien copie la fuente de mi sitio web y actúe como una copia de mi aplicación de una sola página en my-one-and-only-web-cleint.com.

La única comprobación que tengo ahora es:

  • En el lado del servidor: compruebo el origen del encabezado de la solicitud y solo permito las solicitudes de my-one-and-only-web-cleint.com

Pero tengo entendido que puede cambiar manualmente el encabezado, por lo que esta comprobación se puede omitir.

    
pregunta garbage collection 27.07.2014 - 10:12
fuente

2 respuestas

1

Esto suena como prevenir un ataque de CSRF . La Política del mismo origen ya evitará que otro dominio lea su API, pero para evitar solicitudes que se realicen los cambios en su sistema deberán protegerse contra CSRF.

  

En el lado del servidor: compruebo el origen del encabezado de la solicitud y solo permito las solicitudes de my-one-and-only-web-cleint.com

Comprobar el encabezado Origin o uno personalizado como X-Requested-With es una forma válida de superar CSRF .

Un atacante no puede falsificar este encabezado en el navegador web, por lo que cualquier persona que se conecte al sitio del atacante que él ha conectado a su API no podrá usarlo ya que no se puede manipular el encabezado de su navegador.

También debe confiar en un sistema de autorización para evitar que el atacante realice solicitudes de API del lado del servidor (donde pueden establecer el encabezado que desee).

    
respondido por el SilverlightFox 27.07.2014 - 18:57
fuente
1

Suena como una situación similar a los ataques CSRF, por lo que debería ser direccionable con tokens anti-falsificación.

Las fichas de anti-falsificación deben lograr lo que necesitas. Cada vez que recibe una solicitud web, envía un token antirrobo al cliente como parte del FORMULARIO o el script o la aplicación web. El token incluye valores como una fecha, un ID de inicio de sesión y una IP del cliente, cifrados con una clave secreta que solo su servidor conoce. Entonces solo manejas solicitudes que incluyen tokens válidos.

Un intermediario no puede modificar su sitio y alojar su API en el suyo, porque no podrán servir tokens válidos.

Aquí hay más información sobre cómo hacer esto en ASP.NET, pero lo mismo se aplica en otros idiomas.

enlace

    
respondido por el Jeff-Inventor ChromeOS 27.07.2014 - 10:58
fuente

Lea otras preguntas en las etiquetas