2013-03-19 15 views
13

Jesteśmy księgowania żądania AJAX do serwera uruchomiony lokalnie, tznChrome dodanie nagłówka pochodzenia do wniosku tego samego pochodzenia

xhr.open("POST", "http://localhost:9000/context/request"); 
xhr.addHeader(someCustomHeaders); 
xhr.send(someData); 

że strona ta javascript jest wykonywany jest również podawane z localhost: 9000, tj. to zupełnie wygląda na żądanie tego samego pochodzenia.

Jednak z jakiegoś powodu Google Chrome zawsze ustawia nagłówek Origin w wynikowym żądaniu, co powoduje, że nasz serwer blokuje żądanie na podstawie fałszywego założenia, że ​​jest to żądanie CORS.

To nie dzieje się w przeglądarce Firefox.

Ponadto, ani Firefox, ani Chrome nie wysyłają żądania preflight OPTIONS, co jest mylące; dlaczego ustawić nagłówek Origin bez uprzedniego preflighting, aby upewnić się, że nagłówki Origin i Custom są dozwolone przez serwer?

Czy ktoś wie, co się dzieje w tym przypadku? Czy nie rozumiemy specyfikacji CORS?

+0

Zobacz http://seclab.stanford.edu/websec/csrf/csrf.ppt, który odpowiada, dlaczego nagłówek Origin jest odpowiedni dla żądań POST o tym samym pochodzeniu. Jest to mechanizm ochrony CSRF. – user239558

Odpowiedz

22

Chrome i Safari zawierają nagłówek Origin na żądaniach POST/PUT/DELETE tego samego pochodzenia (żądania GET tego samego pochodzenia nie będą miały nagłówka Origin). Firefox nie zawiera nagłówka Origin dla żądań o tym samym pochodzeniu. Przeglądarki nie oczekują nagłówków odpowiedzi CORS na żądania o tym samym pochodzeniu, więc odpowiedź na żądanie tego samego pochodzenia jest wysyłana do użytkownika, niezależnie od tego, czy ma nagłówki CORS, czy nie.

Polecam sprawdzenie nagłówka Host, a jeśli pasuje do domeny w nagłówku Origin, nie traktuj żądania jako CORS. Nagłówki wyglądać tak:

Host: example.com 
Origin: http://example.com 

Zauważ, że Origin będzie miał schemat (HTTP/HTTPS), domenę i port, a Host będzie miał tylko domenę i port.

+0

To ma sens - zmienimy filtr CORS w odpowiedni sposób. Dzięki! –

13

Według RFC 6454 - Web Origin Concept - obecność pochodzenie jest w rzeczywistości prawnej dla każdego żądania HTTP, w tym wnioski tego samego pochodzenia:

http://tools.ietf.org/html/rfc6454#section-7.3

„The użytkownik agent MOŻE zawierać pole nagłówka Origin w dowolnym żądaniu HTTP . "

Powiązane problemy