page - javascript set title attribute



Domänenübergreifende Ajax-Anforderung aus der js-Datei (5)

Hier ist das Problem:

1.) Wir haben Seite hier ... www.blah.com/mypage.html

2.) Diese Seite fordert eine js-Datei www.foo.com wie folgt an ...

<script type="text/javascript" src="http://www.foo.com/jsfile.js" />

3.) "jsfile.js" verwendet Prototype, um eine Ajax-Anfrage an www.foo.com zu stellen.

4.) Die Ajax-Anfrage ruft www.foo.com/blah.html auf. Die Callback-Funktion ruft die HTML-Antwort ab und wirft sie in eine Div-Datei.

Das scheint jedoch nicht zu funktionieren, ich denke es ist XSS. Ist das korrekt?

Wenn ja, wie kann ich dieses Problem lösen? Gibt es eine andere Möglichkeit, mein HTML von www.foo.com auf www.blah.com auf dem Client zu erhalten, ohne einen iframe zu verwenden?


Answer #1

Die oben gezeigte Methode könnte eine große Sicherheitslücke werden. Schlagen Sie vor, den Site-Namen anhand einer Whitelist zu überprüfen und den tatsächlichen URI zu erstellen, der auf der Serverseite weitergeleitet wird.



Answer #3

Es ist XSS und es ist verboten. Du solltest das wirklich nicht so machen.

Wenn Sie es wirklich brauchen, machen Sie Ihren AJAX-Code dazu, den lokalen Code (PHP, ASP, was auch immer) auf blah.com aufzurufen und sich wie ein Client zu verhalten und alles, was Sie benötigen, von foo.com abzurufen und an den Client zurückzugeben. Wenn Sie PHP verwenden, können Sie dies mit fopen ('www.foo.com/blah.html', 'r') tun und dann den Inhalt lesen, als wäre es eine reguläre Datei.

Natürlich muss allow_remote_url_fopen (oder wie es genau heißt) in Ihrer php.ini aktiviert sein.


Answer #4

Für Cross-Domain-Hits ist dies ein gutes Beispiel und wird nun als etwas "Standard" betrachtet http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html .

Es gibt auch andere Möglichkeiten, zB iframes mit document.domain zu injizieren

http://fettig.net/weblog/2005/11/28/how-to-make-xmlhttprequest-connections-to-another-server-in-Ihre-Domain/

Ich bin immer noch damit einverstanden, dass der einfache Weg einen Proxy in derselben Domäne aufruft, aber dann ist es nicht wirklich clientseitige WS-Aufruf.


Answer #5

Wie oben erwähnt, ist JSONP ein Weg, dies zu umgehen. Die Site, von der Sie die Daten anfordern, muss JSONP jedoch unterstützen, damit Sie sie auf dem Client verwenden können. (JSONP fügt im Wesentlichen ein Skript-Tag in die Seite ein und stellt eine Callback-Funktion bereit, die mit den Ergebnissen aufgerufen werden sollte)

Wenn die Website, für die Sie eine Anfrage stellen, JSONP nicht unterstützt, müssen Sie die Anfrage auf Ihrem Server weiterleiten. Wie oben erwähnt, können Sie dies auf Ihrem eigenen Server tun, oder was ich in der Vergangenheit getan habe, ist ein http://www.jsonpit.com , das die Anfrage an Sie weiterleitet.





ajax