@dedicated obawiam sie że mylisz tu kilka pojęć takich jak:
To są zupełnie oderwane od siebie elementy. CORS działa na bazie nagłówka Origin
który zawiera domenę
ustawianą przez przeglądarkę. Czyli jesteś na stronie a.bc
i ta strona wysyła jakiś AJAXowy request do innej domeny
(inny port to tez już inna domena) i w takiej sytuacji przeglądarka dokłada nagłówek Origin: a.bc
do takiego requestu. IP użytkownika nie ma żadnego znaczenia. Docelowa aplikacja może teraz sprawdzić sobie czy ma na whiteliście domenę a.bc
i na tej podstawie zdecydować co zrobić z takim requestem
Żeby wyjaśnić problem z CORS może zacznijmy od tego po co?
. Gdyby mozna było ot tak wysłać request do dowolnego adresu, to mógłbyś np. wejść na stronkę ze śmiesznymi kotami, a ta stronka mogłaby zaczać wysyłać requesty z twojej przeglądarki do innych serwisów.
Z jednej strony to problem bo do takiego requestu mogą zostać dołożone cookies, czyli jesteś zalogowany do banku a ktoś wysyła z twojej przeglądarki request żeby zrobić sobie przelew, albo pobiera informacje o stanie twojego konta.
Z drugiej strony możesz być np. w jakimś VPNie i twoja przeglądarka widzi jakieś hosty "intranetowe", np. jakieś firmowe wewnętrzne systemy i skrypty na stronce ze śmiesznymi kotami mogą zacząć "klikać" po tych systemach proxując się przez twoją przeglądarkę.
Żeby temu zapobiegać wprowadzono SOP - single origin policy, które mówi, że skrypt odpalony z domeny
X może sobie ot tak stukać tylko po adresach z tejże domeny, a jeśli spróbuje stuknąć w coś innego to dochodzi header Origin
i requesty są oznaczone jako cross-origin
. W odpowiedzi na taki request backend zwraca header Access-Control-Allow-Origin
i informuje przeglądarkę jakie originy są ok i na tej podstawie przeglądarka decyduje czy skrypt który wysłał request może odczytać odpowiedź.
Warto wiedzieć, że te zabezpieczenia nie są idealne
. Da się ominąć SOP bez triggerowania CORS. Dzieje sie tak, dlatego że ten cały mechanizm bazuje na domenach
a nie na adresach IP. Jeśli wejdziesz na moją stronę śmiesznekoty.pl
a ja teraz zmienie wpis DNS i sprawie że moje śmiesznekoty.pl
teraz pokazują na IP 192.168.X.X
to skrypty na tej mojej stronie mogą stukać na swoją domenę śmiesznekoty.pl
(czyli CORS tego nie łapie bo jest single origin) ale teraz ta domena rozwiązuje sie do jakiegoś lokalnego adresu i pozwala na komunikacje z intranetowymi aplikacjami. To nazywa sie DNS rebinding
. Przeglądarki maja pewne mechanizmy które próbują temu zapobiegać, cachując sobie na jakis czas IP do których rozwiązują się domeny, ale nie da się tego całkiem wyeliminować, bo dziś wszystko stoi na jakichś cloudach za load balancerami i to że w tej chwili facebook.com
rozwiązuje ci się do jakiegoś IP nie znaczy ze za chwilę ten IP nie będzie już niedostępny.
@TomRiddle chyba coś pokręciłeś, bo CORS ustawia się po stornie "odbiorcy" requestu (backend) a nie po stronie klienta który request wysyła. Problem stanowi to, że jak "wyłączysz" CORS to każdy może do twojego backendu wysłać request w imieniu użytkownika.