2010-07-01 10 views
8

Etwas, was ich wirklich verwirrend finde, warum sind AJAX-Anfragen auf die gleiche Domain beschränkt? Was ist der Grund dafür?Warum sind AJAX-Anfragen auf dieselbe Domain beschränkt?

Ich sehe kein Problem mit der Anforderung von Dateien von externen Standorten, auch Server, die XMLHTTP-Anfragen scheinen zu erhalten und zu externen Standorten gut zu posten.

+0

Wahrscheinlich wird Ihr Passwort nicht an einen falschen Server gesendet ... – Alxandr

+0

Aber die Website, auf der Sie sich befinden, müsste Ihr Passwort über ein Skript senden, und sie wissen es theoretisch bereits, so dass es sinnlos erscheint ? –

Antwort

17

Picture this:

Sie kommen auf meiner fabelhaften Website www.halfnakedgirls.com. Sie haben Spaß dabei, etwas zu sehen, das wie eine technische Dokumentation zur menschlichen Physiologie aussieht, aber hinter Ihrem Rücken führen einige JavaScript-Zeilen eine Anfrage an eine andere Domäne aus, sagen wir www.yourpaypallike.com.

Anfragen wie http://www.yourpaypallike.com/account/[email protected]&amount=984654 oder http://www.mymailprovider.com/mails/export?format=csv.

Sehen Sie jetzt, warum es verboten ist? =)

+1

Danke, das macht sehr viel Sinn. Unter der Annahme, dass der Benutzer bei Paypal angemeldet ist, kann die bösartige Website auf eine externe Site zugreifen, als wären sie eingeloggt. –

+0

Täuschen Sie vor, ich bin ein Dummy und ich sehe nicht, warum es verboten ist. Ist das Problem, dass die halfnakedgirls.com ist in der Lage, böse Anweisungen zu paypal mit Ihren paypal Cookies senden, obwohl es nicht in der Lage, diese Cookies selbst lesen? Mit der Umgehungslösung "Site Redirect" werden die Cookie-Daten entfernt und Paypal betrachtet Sie nicht als eingeloggt? –

+0

Genau, weil Ihr Browser die Cookies automatisch zu jeder Anfrage hinzufügt. Sie fordern yourpaypallike.com, der Browser sendet Cookies von paypallike.com entlang der Ajax-Anfrage. Die "Site Redirect" entfernt tatsächlich den Cookie. Die erste Anfrage an den "Middle-Man-Server" enthält keine Cookies des Endziels (youpaypallike.com). Wenn also der Middle-Man-Server die Anfrage an paypalike übermittelt, werden keine paypallike Cookies gesetzt. –

0

Hier finden Sie einige Informationen, um Ihre Frage zu erfüllen: http://en.wikipedia.org/wiki/Same_origin_policy

+1

Danke für den Link, aber es gibt mir immer noch keinen befriedigenden Grund, warum es nicht erlaubt ist, es beschreibt es nur als ein Sicherheitskonzept. –

1

Es ist aus Sicherheitsgründen - wenn eine Website AJAX-Aufrufe für alle Domain ausführen kann sie auf der Client-Seite wollte, es ein ernstes Risiko darstellt.

Es gibt jedoch Möglichkeiten, dies zu tun - Sie könnten Ihr AJAX ein PHP-Skript auf der gleichen Domäne aufrufen lassen, das wiederum ein Skript aus einer anderen Domäne aufrufen und zurückgeben kann. Dies würde jedoch nicht den Browser als Kommunikationsmedium verwenden, sondern Ihren Webserver.

+0

Danke, ich weiß, dass es ein Sicherheitsrisiko darstellt, aber niemand hat erklärt, was das ist. –

3

Tom, es ist nicht "Ajax Anfrage begrenzt". AJAX basiert auf JavaScript. Aus Sicherheitsgründen ist JavaScript auf Cross-Domains verboten. Wenn du wirklich domainübergreifend Ajax machen willst, kannst du einen Hack machen.

YourPage (Ajax) ----> IhrServer ----> ExternalDomain

Sie können eine Seite in Ihrem Server aufrufen mit Ajax, wird Ihre Domain zu externen Domäne rufen Serverseite verwendet wird, und das Ergebnis erhalten dann kehren Sie als Ajax-Antwort zu Ihnen zurück. Natürlich wird die Anfrage an den ExternalDomain Server OHNE das Senden von Cookies für ExternalDomain aufgerufen, die sich im Speicher Ihres Browsers befinden. Das liegt daran, dass die Anfrage von Ihrem Server und nicht von Ihrem Browser erledigt wird.