2009-05-30 12 views
13

Załóżmy, że mam domenę, js.mydomain.com, i wskazuje ona na jakiś adres IP oraz inną domenę, requests.mydomain.com, która wskazuje na inny adres IP. Czy plik .js pobrany z js.mydomain.com może przesłać żądania Ajax do requests.mydomain.com?Jak dokładnie są egzekwowane zasady tej samej domeny?

W jaki sposób nowoczesne przeglądarki wymuszają stosowanie zasad tej samej domeny?

Odpowiedz

11

Krótka odpowiedź na twoje pytanie brzmi: nie dla połączeń AJAX, możesz uzyskać dostęp tylko do tej samej nazwy hosta (i portu/schematu), z której została załadowana twoja strona.

Istnieje kilka obejść: jeden ma na celu utworzenie adresu URL w foo.example.com, który działa jako odwrotny serwer proxy dla bar.example.com. Przeglądarka nie dba o to, gdzie żądanie jest rzeczywiście spełnione, o ile nazwa hosta jest zgodna. Jeśli masz już serwer WWW Apache z przodu, nie będzie to zbyt trudne.

Kolejną alternatywą jest AJAST, która działa poprzez wstawianie znaczników skryptu do dokumentu. Uważam, że tak działają interfejsy API Google.

Znajdziesz tu dobry opis polityki tego samego pochodzenia tutaj: http://code.google.com/p/browsersec/wiki/Part2

+0

Dzięki! To bardzo pomogło - AJAST wygląda jak świetna opcja. –

+0

FWIW, IE na ogół nie dba o port. http://blogs.msdn.com/ieinternals/archive/2009/07/23/The-IE8-Native-XMLHttpRequest-Object.aspx – EricLaw

+3

Warto również wspomnieć, że adres IP nie ma znaczenia (w dowolnej przeglądarce) - - to TYLKO protcol/scheme, host i (w niektórych przypadkach) port, który określa pochodzenie. Oznacza to, że dwa różne miejsca pochodzenia podawane z tego samego adresu IP * mogą nie * komunikować się i że to samo miejsce pochodzenia jest obsługiwane w wielu IP, z którymi może łączyć się system równoważenia obciążenia *. – EricLaw

1

To nie zadziała, ponieważ nazwa hosta jest inna. Dwie strony są uważane za pochodzące z tego samego pochodzenia, jeśli mają ten sam host, protokół i port.

Z Wikipedii na the same origin policy:

Pojęcie „pochodzenie” jest zdefiniowana przy użyciu nazwy domeny, warstwa aplikacji protokół oraz (w większości przeglądarek) portu TCP dokumentu HTML uruchomiony skrypt . Dwa zasoby są uważane za , aby być tego samego pochodzenia, jeśli tylko i wyłącznie , jeśli wszystkie te wartości są dokładnie takie same.

Powiązane problemy