Widziałem artykuły i posty (w tym SO) na ten temat, a dominującym komentarzem jest to, że polityka tego samego pochodzenia zapobiega wysyłaniu formularza POST w różnych domenach. Jedyne miejsce, w którym ktoś sugerował, że polityka tego samego pochodzenia nie dotyczy postów formularzy, jest tutaj .
Chciałbym otrzymać odpowiedź z bardziej „oficjalnego” lub formalnego źródła. Na przykład, czy ktoś zna specyfikację RFC, która odnosi się do tego, jak to samo źródło wpływa lub nie wpływa na formularz POST?
wyjaśnienie : nie pytam, czy GET lub POST można zbudować i wysłać do dowolnej domeny. Pytam się:
- czy Chrome, IE lub Firefox zezwalają zawartości z domeny „Y” na wysyłanie POST do domeny „X”
- czy serwer odbierający POST w rzeczywistości zobaczy jakiekolwiek wartości formularza. Mówię to, ponieważ większość dyskusji online rejestruje testerów, którzy twierdzą, że serwer otrzymał wiadomość, ale wszystkie wartości formularza były puste / usunięte.
- Jaki oficjalny dokument (tj. RFC) wyjaśnia, jakie jest oczekiwane zachowanie (niezależnie od tego, jakie przeglądarki obecnie zaimplementowały).
Nawiasem mówiąc, jeśli to samo pochodzenie nie wpływa na posty z formularza - wtedy staje się nieco bardziej oczywiste, dlaczego tokeny chroniące przed fałszerstwem są konieczne. Mówię „trochę”, ponieważ zbyt łatwo wydaje się, że osoba atakująca może po prostu wydać HTTP GET w celu pobrania formularza zawierającego token zabezpieczający przed fałszerstwem, a następnie wykonać niedozwolony POST zawierający ten sam token. Komentarze?
Odpowiedzi:
Te same zasady dotyczące pochodzenia mają zastosowanie tylko do języków programowania po stronie przeglądarki. Więc jeśli spróbujesz wysłać wiadomość na inny serwer niż serwer pochodzenia przy użyciu JavaScript, wtedy w grę wchodzi ta sama zasada pochodzenia, ale jeśli wysyłasz bezpośrednio z formularza, tj. Akcja wskazuje na inny serwer, na przykład:
i nie ma javascript zaangażowanego w wysyłanie formularza, wtedy ta sama polityka pochodzenia nie ma zastosowania.
Więcej informacji można znaleźć w Wikipedii
źródło
Możliwe jest zbudowanie dowolnego żądania GET lub POST i wysłanie go na dowolny serwer dostępny dla przeglądarki ofiary. Obejmuje to urządzenia w sieci lokalnej, takie jak drukarki i routery.
Istnieje wiele sposobów tworzenia exploita CSRF. Prosty atak CSRF oparty na POST można wysłać za pomocą
.submit()
metody. Bardziej złożone ataki, takie jak cross-site atakami CSRF wysyłania plików będzie wykorzystywał CORS używać z zachowaniem xhr.withCredentals .CSRF nie narusza zasady tego samego pochodzenia dla skryptów JavaScrip t, ponieważ SOP dotyczy JavaScript odczytującego odpowiedź serwera na żądanie klienta. Ataki CSRF nie przejmują się odpowiedzią, dbają o efekt uboczny lub zmianę stanu wywołaną przez żądanie, taką jak dodanie użytkownika administracyjnego lub wykonanie dowolnego kodu na serwerze.
Upewnij się, że Twoje żądania są chronione za pomocą jednej z metod opisanych w ściągawce OWASP CSRF Prevention . Więcej informacji na temat CSRF można znaleźć na stronie OWASP poświęconej CSRF .
źródło
Ta sama zasada pochodzenia nie ma nic wspólnego z wysyłaniem żądania do innego adresu URL (innego protokołu, domeny lub portu).
Chodzi o ograniczenie dostępu do (odczytywania) danych odpowiedzi z innego adresu URL. Tak więc kod JavaScript na stronie może wysyłać do dowolnej domeny lub przesyłać formularze z tej strony w dowolne miejsce (chyba że formularz jest w ramce iframe z innym adresem URL).
Ale to, co sprawia, że żądania POST są nieefektywne, to fakt, że nie zawierają one tokenów zabezpieczających przed fałszerstwem, więc są ignorowane przez inny adres URL. Co więcej, jeśli JavaScript próbuje uzyskać te tokeny bezpieczeństwa, wysyłając żądanie AJAX na adres URL ofiary, uniemożliwia dostęp do tych danych zgodnie z Polityką tego samego pochodzenia.
Dobry przykład: tutaj
I dobra dokumentacja z Mozilli: tutaj
źródło