Asegurar la llamada interna del servicio REST a través de JavaScipt

2

Tengo una aplicación pública de una sola página (SPA) que está llamando a mi servicio REST backend a través de JavaScript. ¿Cómo puedo asegurar el servicio REST para que solo acepte llamadas de mi SPA y no de otros clientes o usuarios? Básicamente, mi SPA debe ser el único usuario permitido del servicio.

Cualquier forma en la que pueda pensar para asegurarlo implica el almacenamiento de algún tipo de secreto, sin embargo, debido a que el SPA está escrito completamente en JavaScript, cualquiera puede ver la fuente.

    
pregunta kimsagro 22.03.2014 - 07:37
fuente

3 respuestas

4

No puedes, de verdad. Cualquier cosa enviada a través de javascript puede ser manipulada. Debido a esto, su SPA será vulnerable a los ataques XSS y MITM. Una opción sería usar tokens de sesión y ofuscación, que es una solución tan grotesca. Además, será una apertura para los ataques CSRF: CSRF . De lo contrario, recomiendo que sus usuarios inicien sesión para que haya alguna forma de autenticación.

    
respondido por el dperconti 25.03.2014 - 18:05
fuente
0

Supongo que no es 100% posible. Según mi entendimiento, lo que puede intentar es usar el nonce criptográfico. Obtenga más información sobre nonce en - enlace

La forma simple en que trataría de lograr esto. 1. Generar un nonce inicial. 2. Utilice este nonce en la próxima comunicación con el servidor. 3. En el servidor, verifique que el nonce sea generado solo por mi aplicación 4. Cree un nuevo nonce y combínelo junto con la respuesta. 5. Vaya al paso 2 y use el nuevo código.

    
respondido por el Vishal Raj 27.03.2014 - 11:33
fuente
0

Puede configurar CORS (Intercambio de recursos de origen cruzado) para responder a solicitudes provenientes de un dominio en particular. En el nodo JS hay un paquete para hacerlo.

var express = require('express')
var cors = require('cors')
var app = express()

var corsOptions = {
  origin: 'http://linktoyourSPA.com',
}

app.use(cors(corsOption));

Esto permitiría solicitudes solo de ese dominio en particular.

Si no está utilizando nodeJs. Puede configurar manualmente el encabezado de respuesta Access-Control-Allow-Origin . Para obtener más información, lea este enlace

    
respondido por el Balaji S 06.07.2018 - 15:45
fuente

Lea otras preguntas en las etiquetas