CORS z POSTMAN


89

O ten temat zadawano kilka razy, ale nadal czegoś nie rozumiem:

Kiedy czytam odpowiedzi o

Brak nagłówka „Access-Control-Allow-Origin”

kwestia, to mówi ustawienie powinno być ustawione na żądanym serwerem w celu umożliwienia domenę poprzeczny: add_header 'Access-Control-Allow-Origin' '*';.

Ale proszę powiedz mi, dlaczego, pytając listonosza (który jest klientem), działa jak urok i mam odpowiedź z żądanego serwera?

Dziękuję Ci


24
Postman nie dba o SOP, jest to narzędzie programistyczne, a nie przeglądarka.
Musa

2
@Musa Ok, więc jeśli jest to problem z przeglądarką (klientem), po co miałbym coś modyfikować na serwerze?
IsraGab

7
To serwer, który mówi przeglądarce, że jest w porządku ( CORS ), czy nie, aby dana witryna miała dostęp do jej treści, a przeglądarka to honoruje
Musa

Mam dokładnie to samo pytanie. Jak można to zrobić programowo, w tym przypadku na elektronie.
mluis

8
Prawdziwe pytanie dotyczy tego, jak skonfigurować POSTMAN, aby naśladował zachowanie przeglądarki, w której żądanie ORIGIN jest wysyłane jako pierwsze. Krótko mówiąc, jak sprawić, by POSTMAN zachowywał się jak przeglądarka, ponieważ musimy przetestować, aby upewnić się, że nasze interfejsy API są poprawnie skonfigurowane. A co jeśli API działa z POSTMAN i zepsuje się z powodu CORS z przeglądarki. Oznacza to, że API jest bezużyteczne.
Chris Love,

Odpowiedzi:


50

Jak komentuje @Musa, wydaje się, że powodem jest to, że:

Postman nie dba o SOP, to narzędzie programistyczne, a nie przeglądarka

Nawiasem mówiąc, tutaj jest rozszerzenie do Chrome , aby działało w Twojej przeglądarce (to jest dla Chrome, ale możesz znaleźć albo FF lub Safari).

Sprawdź tutaj, jeśli chcesz dowiedzieć się więcej o Cross-Origin i dlaczego to działa dla rozszerzeń.


5
W takim razie, jak mogę chronić moje trasy API, do których dostęp mają narzędzia takie jak Postman? Na przykład API, które wymaga weryfikacji captcha. Ale jeśli dostępne bezpośrednio z Postman, weryfikacja captcha jest pomijany
Sadman Muhib Samyo

5
Link do rozszerzenia jest uszkodzony.
jayarjo

Poza tym to samo pytanie, w jaki sposób rozszerzenie może spowodować złamanie polityki jednego źródła?
Iván Cortés Romero

link do rozszerzenia chrome jest uszkodzony
OhadR

44

Jeśli korzystasz z witryny internetowej i wypełniasz formularz w celu przesłania informacji (na przykład numeru ubezpieczenia społecznego), chcesz mieć pewność, że informacje są wysyłane do witryny, do której Twoim zdaniem są wysyłane. Dlatego przeglądarki zostały zbudowane tak, aby domyślnie mówić: „Nie wysyłaj informacji do domeny innej niż odwiedzana domena).

Ostatecznie stało się to zbyt ograniczające, ale domyślny pomysł nadal pozostaje w przeglądarkach. Nie pozwól, aby strona internetowa wysyłała informacje do innej domeny. Ale to wszystko jest sprawdzaniem przeglądarki. Chrome i Firefox itp. Mają wbudowany kod, który mówi: „Przed wysłaniem tego żądania sprawdzimy, czy miejsce docelowe odpowiada odwiedzanej stronie”.

Postman (lub CURL w linii cmd) nie ma tych wbudowanych kontroli. Ręcznie wchodzisz w interakcję z witryną, więc masz pełną kontrolę nad tym, co wysyłasz.


2
Dokładniej, listonosz nie wysyła żądania XmlHttp, które zostałoby sprawdzone, ale wywołanie sieciowe najwyższego poziomu (takie jak otwarcie adresu URL na nowej karcie przeglądarki), więc nie zostaje wyrzucone, nawet gdy jest przedłużone
tgkprog

Przeglądarka nie sprawdza, czy Twoja witryna nie wysyła danych do innej domeny: jeśli witryna z innej domeny zezwala na wszystkie źródła, Twoja przeglądarka jest z tym w 100% w porządku. Wręcz przeciwnie, chroni drugą domenę na wypadek, gdyby Twoja witryna korzystała z zasobów bez autoryzacji.
XouDo

35

CORS(Współdzielenie zasobów między źródłami) i SOP(Zasady tego samego źródła) to konfiguracje po stronie serwera, które klienci decydują się wymusić lub nie .

Powiązane z klientami

  • Większość przeglądarek wymusza to, aby zapobiec problemom związanym z CSRFatakiem.
  • Większość narzędzi programistycznych nie obchodzi o to.

10

Chociaż wszystkie odpowiedzi tutaj są naprawdę dobrym wyjaśnieniem, czym są cors, ale bezpośrednia odpowiedź na twoje pytanie byłaby z powodu następujących różnic między listonoszem a przeglądarką.

Przeglądarka: wysyła OPTIONSwywołanie, aby sprawdzić typ serwera i pobrać nagłówki przed wysłaniem nowego żądania do punktu końcowego interfejsu API. Gdzie to sprawdza Access-Control-Allow-Origin. Biorąc to pod uwagę, Access-Control-Allow-Originnagłówek tylko określa, które wszystkie CROSS ORIGINS są dozwolone, chociaż domyślnie przeglądarka zezwala tylko na to samo źródło.

Listonosz: Wysyła bezpośredni GET, POST, PUT, DELETEitd. Żądanie bez sprawdzenia, jaki typ serwera jest i uzyskiwanie nagłówka Access-Control-Allow-Originza pomocą OPTIONSpołączenia z serwerem.


„Wysyła wywołanie OPTIONS, aby sprawdzić typ serwera i pobrać nagłówki przed wysłaniem nowego żądania do punktu końcowego API” - to nieprawda. Robi to tylko w przypadku nieprostych żądań.
Quentin

1

Ogólnie rzecz biorąc, Postman używany do debugowania i używany w fazie rozwoju. Ale jeśli chcesz go zablokować nawet przed listonoszem, spróbuj tego.

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

dodaj kod do pliku z routerem. Jeśli masz plik z „routerami”, dodaj kod na początku pliku. Ten sam plik, w którym masz: const express = require ('express') const app = express (); const cors = require ('cors');
samceena

edytuj go, app.jsjeśli używasz node app.jsdo uruchamiania serwera.
Bharath Pabba

czy to może chronić twój serwer przed ddos?
SuperUberDuper

-1

Użyj wtyczki przeglądarki / chrome postman, aby sprawdzić CORS / SOP jak stronę internetową. Zamiast tego użyj aplikacji komputerowej, aby uniknąć tych elementów sterujących.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.