POSTMAN과 CORS


89

이 주제에 대해 몇 번 질문을 받았지만 여전히 이해가되지 않습니다.

에 대한 답변을 읽을 때

'Access-Control-Allow-Origin'헤더 없음

문제가 발생하면 도메인 간을 허용하려면 요청 된 서버에서 설정을 설정해야한다고 말합니다 : add_header 'Access-Control-Allow-Origin' '*';.

그런데 왜 우체부 (클라이언트) 에게 물었을 때 매력처럼 작동하고 요청한 서버에서 응답을 받았 는지 알려주세요 .

감사합니다


24
Postman은 SOP에 관심이 없으며 브라우저가 아닌 개발 도구입니다.
Musa

2
@Musa Ok, 브라우저 (클라이언트) 문제라면 왜 서버에서 무언가를 수정해야합니까?
IsraGab

7
자사의 브라우저에 지시 서버 자사 괜찮 ( CORS 여부를 해당 사이트의 내용과 브라우저 명예 그것을 액세스하는 경우)
무사

나는 똑같은 질문이 있습니다. 이 경우 전자에 대해 어떻게 프로그래밍 방식으로 할 수 있습니까?
mluis

8
여기서 진짜 질문은 ORIGIN 요청이 먼저 전송되는 브라우저 동작을 모방하도록 POSTMAN을 구성하는 방법입니다. 본질적으로 POSTMAN이 브라우저처럼 작동하도록 만드는 방법은 API가 올바르게 구성되었는지 테스트해야하기 때문입니다. 따라서 API가 POSTMAN에서 작동하고 브라우저의 CORS로 인해 중단되면 어떻게 될까요? API가 쓸모가 없다는 뜻입니다.
Chris Love

답변:


50

@Musa가 언급했듯이 그 이유는 다음과 같습니다.

Postman은 SOP에 대해 신경 쓰지 않고 브라우저가 아닌 개발 도구입니다.

그건 그렇고 , 브라우저에서 작동하도록하기 위한 크롬 확장 프로그램 입니다 (이는 크롬 용이지만 FF 또는 Safari 용으로 찾을 수 있음).

Cross-Origin 에 대해 자세히 알아보고 확장 기능이 작동하는 이유 를 확인 하려면 여기를 확인 하세요 .


5
그러면 Postman과 같은 도구에서 액세스되는 API 경로를 어떻게 보호 할 수 있습니까? 예를 들어 보안 문자 확인이 필요한 API입니다. 그러나 Postman에서 직접 액세스하는 경우 보안 문자 확인이 우회됩니다.
Sadman Muhib Samyo

5
확장에 대한 링크가 끊어졌습니다.
jayarjo

이 외에도 확장 프로그램이 단일 출처 정책을 위반할 수있는 방법은 무엇입니까?
Iván Cortés Romero

크롬 확장에 대한 링크가 깨졌습니다
OhadR

44

웹 사이트를 사용하고 정보 (예 : 사회 보장 번호)를 제출하기 위해 양식을 작성하는 경우 정보가 전송되고 있다고 생각하는 사이트로 정보가 전송되고 있는지 확인하고 싶습니다. 따라서 브라우저는 기본적으로 '방문중인 도메인이 아닌 도메인으로 정보를 보내지 마십시오.

결국 그것은 너무 제한적 이었지만 기본 아이디어는 여전히 브라우저에 남아 있습니다. 웹 페이지가 다른 도메인으로 정보를 보내지 않도록하십시오. 그러나 이것은 모든 브라우저 검사입니다. Chrome 및 Firefox 등에는 '이 요청을 보내기 전에 목적지가 방문중인 페이지와 일치하는지 확인합니다'라는 코드가 내장되어 있습니다.

Postman (또는 cmd 행의 CURL)에는 내장 검사가 없습니다. 사이트와 수동으로 상호 작용하므로 보내는 내용을 완전히 제어 할 수 있습니다.


2
보다 정확하게는 postman이 확인되는 XmlHttp 요청을 보내지 않지만 최상위 네트워크 호출 (새 브라우저 탭에서 URL을 여는 것과 같은)을 보내므로 확장 상태에서도 시작되지 않습니다.
tgkprog

브라우저는 사이트가 다른 도메인으로 데이터를 전송하지 않는지 확인하지 않습니다. 다른 도메인 사이트가 모든 출처를 허용하는 경우 브라우저는 100 % 괜찮습니다. 그 반대입니다. 사이트가 승인없이 리소스를 사용할 경우를 대비하여 다른 도메인을 보호합니다.
XouDo

35

CORS(교차 출처 리소스 공유) 및 SOP(동일 출처 정책)은 클라이언트가 시행할지 여부를 결정 하는 서버 측 구성입니다 .

클라이언트 관련

  • 대부분의 브라우저 CSRF 공격 과 관련된 문제를 방지하기 위해이를 시행 합니다 .
  • 대부분의 개발 도구 는 신경 쓰지 않습니다 .

10

여기에있는 모든 답변은 cors가 무엇인지에 대한 정말 좋은 설명이지만 귀하의 질문에 대한 직접적인 답변은 우편 배달부와 브라우저의 다음과 같은 차이점 때문입니다.

브라우저 : OPTIONSAPI 엔드 포인트에 새 요청을 보내기 전에 서버 유형을 확인하고 헤더를 가져 오는 호출을 보냅니다 . 그것은 어디를 확인합니다 Access-Control-Allow-Origin. 이것을 고려하여Access-Control-Allow-Origin 헤더는 기본적으로 브라우저가 동일한 출처 만 허용하지만 허용되는 모든 CROSS ORIGINS를 지정합니다.

우체부 : 보냅니다 직접 GET, POST, PUT, DELETE과 헤더를 받고 서버의 유형을 확인하지 않고 등의 요청 Access-Control-Allow-Origin을 사용하여 OPTIONS서버에 전화를.


"API 엔드 포인트에 새로운 요청을 보내기 전에 서버 유형을 확인하고 헤더를 가져 오기 위해 OPTIONS 호출을 보냅니다."-사실이 아닙니다. 단순하지 않은 요청에만 해당됩니다.
Quentin

1

일반적으로 Postman은 디버깅에 사용되며 개발 단계에서 사용됩니다. 그러나 우편 배달부에서도 차단하고 싶다면 이것을 시도하십시오.

    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();
    });

라우터를 사용하여 파일에 코드를 추가하십시오. "라우터"가있는 파일이있는 경우 파일 맨 위에 코드를 추가하십시오. 다음과 같은 파일이 있습니다. const express = require ( 'express') const app = express (); const cors = require ( 'cors');
samceena

서버를 실행하는 데 app.js사용 node app.js하는 경우 편집하십시오 .
Bharath Pabba

DDO로부터 서버를 보호 할 수 있습니까?
SuperUberDuper

-1

브라우저 / 크롬 우편 배달부 플러그인을 사용하여 웹 사이트처럼 CORS / SOP를 확인하세요. 이러한 제어를 방지하려면 대신 데스크톱 응용 프로그램을 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.