CORS con CARTERO

89

Este tema se ha preguntado un par de veces, pero todavía no entiendo algo:

Cuando leo respuestas sobre

Sin encabezado 'Access-Control-Allow-Origin'

cuestión, se dice que un ajuste se debe establecer en el servidor solicitado con el fin de permitir que varios dominios: add_header 'Access-Control-Allow-Origin' '*';.

Pero, por favor, dígame por qué cuando le pregunta al cartero (que es un cliente), funciona como un encanto y tengo una respuesta del servidor solicitado

Gracias

IsraGab
fuente
24
Postman no se preocupa por SOP, es una herramienta de desarrollo, no un navegador.
Musa
2
@Musa Ok, si se trata de un problema del navegador (cliente), ¿por qué debería modificar algo en el servidor?
IsraGab
7
Es el servidor que le dice al navegador que está bien ( CORS ) o no que un sitio determinado acceda a su contenido y el navegador lo respeta
Musa
Yo tengo exactamente la misma pregunta. ¿Cómo se puede hacer eso programáticamente, en este caso con un electrón?
mluis
8
La verdadera pregunta aquí es cómo configurar POSTMAN para imitar el comportamiento del navegador donde se envía primero una solicitud ORIGIN. En esencia, cómo hacer que POSTMAN se comporte como un navegador porque necesitamos probar para asegurarnos de que nuestras API estén configuradas correctamente. Entonces, ¿qué pasa si la API funciona desde POSTMAN y se rompe debido a CORS desde el navegador? Significa que la API es inútil.
Chris Love

Respuestas:

50

Como lo comenta @Musa, parece que el motivo es que:

Al cartero no le importa SOP, es una herramienta de desarrollo, no un navegador

Por cierto, aquí tienes una extensión de Chrome para que funcione en su navegador (esta es para Chrome, pero puede encontrarla para FF o Safari).

Marque aquí si desea obtener más información sobre Cross-Origin y por qué funciona para las extensiones.

IsraGab
fuente
5
Entonces, ¿cómo protejo el acceso a mis rutas API desde herramientas como Postman? Por ejemplo, una API que requiere una verificación de captcha. Pero si se accede directamente desde Postman, se omite la verificación de captcha
Sadman Muhib Samyo
5
El enlace a la extensión está roto.
jayarjo
La misma pregunta, además de esto, ¿cómo puede una extensión hacer que rompa la política de origen único?
Iván Cortés Romero
El enlace a la extensión de Chrome está roto
OhadR
44

Si utiliza un sitio web y completa un formulario para enviar información (su número de seguro social, por ejemplo), desea asegurarse de que la información se envíe al sitio al que cree que se envía. Por lo tanto, los navegadores se crearon para decir, de forma predeterminada, 'No envíe información a un dominio que no sea el que se está visitando'.

Con el tiempo, eso se volvió demasiado limitante, pero la idea predeterminada todavía permanece en los navegadores. No permita que la página web envíe información a un dominio diferente. Pero todo esto es una comprobación del navegador. Chrome y Firefox, etc. tienen un código integrado que dice "antes de enviar esta solicitud, vamos a verificar que el destino coincida con la página que se está visitando".

Postman (o CURL en la línea cmd) no tiene esos controles incorporados. Estás interactuando manualmente con un sitio para tener control total sobre lo que estás enviando.

usuario3724317
fuente
2
Más precisamente, el cartero no envía una solicitud XmlHttp que se verificaría, sino una llamada de red de nivel superior (como abrir la URL en una nueva pestaña del navegador) para que no se
active
El navegador no está comprobando que su sitio no envíe datos a otro dominio: si el sitio del otro dominio permite todos los orígenes, su navegador está 100% de acuerdo con eso. Es lo contrario, está protegiendo el otro dominio, en caso de que su sitio use sus recursos sin estar autorizado.
XouDo
35

CORS(Uso compartido de recursos entre orígenes) y SOP(Política del mismo origen) son configuraciones del lado del servidor que los clientes deciden hacer cumplir o no .

Relacionado con los clientes

  • La mayoría de los navegadores lo aplican para evitar problemas relacionados con los CSRFataques.
  • A la mayoría de las herramientas de desarrollo no les importa .
Felipe Roos
fuente
10

Si bien todas las respuestas aquí son una muy buena explicación de lo que es cors, la respuesta directa a su pregunta sería debido a las siguientes diferencias cartero y navegador.

Navegador: envía una OPTIONSllamada para verificar el tipo de servidor y obtener los encabezados antes de enviar cualquier solicitud nueva al punto final de la API. Donde busca Access-Control-Allow-Origin. Teniendo esto en cuentaAccess-Control-Allow-Origin encabezado solo especifica qué ORÍGENES CRUZADOS están permitidos, aunque por defecto el navegador solo permitirá el mismo origen.

Cartero: Envía directa GET, POST, PUT, DELETEetc. solicitud sin la comprobación de qué tipo de servidor es y conseguir la cabecera Access-Control-Allow-Originmediante el uso de OPTIONSllamada al servidor.

Rishabh Batra
fuente
"Envía una llamada a OPTIONS para verificar el tipo de servidor y obtener los encabezados antes de enviar cualquier solicitud nueva al punto final de la API". Eso no es cierto. Solo lo hace para solicitudes no simples.
Quentin
1

Generalmente, Postman se usa para depurar y se usa en la fase de desarrollo. Pero en caso de que quiera bloquearlo incluso del cartero, intente esto.

    const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
    //check for the referrer domain
    app.all('/*', function(req, res, next) {
      if(req.headers.referer.indexOf(referrer_domain) == -1){
        res.send('Invalid Request')
      }

      next();
    });
Bharat Pabba
fuente
agregue el código en su archivo con el enrutador. Si tiene un archivo con "enrutadores", agregue el código en la parte superior del archivo. El mismo archivo donde tiene: const express = require ('express') const app = express (); const cors = require ('cors');
samceena
edítelo app.jssi lo usa node app.jspara ejecutar el servidor.
Bharath Pabba
¿Puede eso proteger su servidor de ddos?
SuperUberDuper
-1

Utilice el complemento de cartero de navegador / Chrome para comprobar el CORS / SOP como un sitio web. En su lugar, utilice la aplicación de escritorio para evitar estos controles.

Guillermo Ellison
fuente