Frage

Obwohl Cross-Site-Scripting im Allgemeinen als negativ angesehen wird, bin ich auf mehrere Situationen gestoßen, in denen es notwendig ist.

Ich habe kürzlich mit den Grenzen eines sehr einschränkenden Content-Management-Systems gearbeitet.Ich musste Datenbankcode in die Seite einfügen, aber auf dem Hosting-Server war nichts Verwendbares verfügbar.Ich habe ein paar einfache Skripte auf meinem eigenen Server eingerichtet und dachte ursprünglich, dass ich AJAX verwenden könnte, um die Inhalte meiner Skripte direkt in die Vorlage des CMS zu importieren (und so dynamische Bilder, Menüelemente, CSS usw. beizubehalten).Ich hab mich geirrt.

Aufgrund der Einschränkungen von XMLHttpRequest Objekte ist es nicht möglich, Inhalte aus einer anderen Domäne abzurufen.Also dachte ich iFrame – Auch wenn ich kein Fan von Frames bin, dachte ich, dass ich einen Frame erstellen könnte, der der Breite und Höhe des Inhalts entspricht, sodass er nativ wirkt.Wieder wurde ich durch Cross-Site-Scripting "Schutz" blockiert. Während ich tatsächlich eine Remotedatei in die laden konnte iFrame, konnte ich weder auf der Hostseite noch innerhalb der geladenen Seite JavaScript ausführen, um die Größe zu ändern.

In diesem speziellen Szenario konnte ich keine Subdomain auf meinen Server verweisen. Ich konnte auch kein Skript auf dem CMS-Server erstellen, das Inhalte von meinem Server weiterleiten könnte, daher war mein letzter Gedanke, ein Remote-JavaScript zu verwenden.

Ein Remote-JavaScript funktioniert.Es bricht ab, wenn der Benutzer JavaScript deaktiviert hat, was einen Nachteil darstellt.Aber es funktioniert.Das „Problem“, das ich bei der Verwendung eines Remote-JavaScript hatte, war, dass ich die JS-Funktion verwenden musste document.write() um beliebige Inhalte auszugeben.Jede Ausgabe, die nicht JS ist, führt zu Skriptfehlern.Zusätzlich zur Verwendung document.write() Für jede Zeile müssen Sie außerdem sicherstellen, dass der Inhalt maskiert ist – andernfalls kommt es zu weiteren Skriptfehlern.

Meine Lösung war wie folgt:

Mein Skript hat einen GET-Parameter („page“) erhalten und dann nach der Datei gesucht ({$page}.php) und lesen Sie den Inhalt in eine Variable ein.Allerdings musste ich umständliche Puffertechniken verwenden, um die enthaltenen Skripte tatsächlich auszuführen (für Dinge wie die Datenbankinteraktion) und dann den endgültigen Inhalt aller Zeilenumbruchzeichen entfernen (\n), gefolgt von einem Escapezeichen für alle erforderlichen Zeichen.Das Endergebnis ist, dass mein ursprüngliches Skript (das JavaScript ausgibt) auf scheinbar „Standard“-Skripte auf meinem Server zugreift und deren Standardausgabe zur Anzeige in der CMS-Vorlage in JavaScript konvertiert.

Obwohl diese Lösung funktioniert, scheint es, dass es einen besseren Weg gibt, dasselbe zu erreichen.Was ist der beste Weg, um Cross-Site-Scripting speziell zum Zweck der Einbeziehung von Inhalten aus einer völlig anderen Domain zum Laufen zu bringen?

War es hilfreich?

Lösung

Sie haben drei Möglichkeiten:

  1. Ein ... kreieren serverseitiges Proxy-Skript.
  2. Erstellen Sie ein Remote-Skript, um dynamisches Remote-HTML einzulesen.Verwenden Sie eine Bibliothek wie jQuery um dies einfacher zu machen.Du kannst den ... benutzen Ladefunktion um HTML dort einzufügen, wo es benötigt wird. BEARBEITEN Was ich zum Beispiel Nr. 2 ursprünglich meinte, war die Nutzung JSONP, das erfordert das serverseitige Skript, um den "Callback =?" zu erkennen? Param.

  3. Benutze einen Clientseitiger Flash-Proxy und richten Sie ein ein crossdomain.xml Datei im Web-Root Ihres Servers.

Andere Tipps

Persönlich würde ich diese andere Domain anrufen auf dem Server und rufen Sie die Daten dort ab und analysieren Sie sie zur Verwendung auf Ihrer Seite.Auf diese Weise vermeiden Sie Probleme und erhalten die Leistungsfähigkeit einer serverseitigen Sprache/Plattform zum Abrufen und Analysieren der Daten.

Ich bin mir nicht sicher, ob das für Ihr spezielles Szenario funktionieren würde ... selbst mit Ihrer ausführlichen Beschreibung schwer zu sagen ...

Du könntest es versuchen easyXDM, Durch die Einbindung von sehr wenig Code können Sie Daten oder Methodenaufrufe zwischen Dokumenten verschiedener Domänen übergeben.

Ich bin darauf gestoßen YDN-serverseitiges Proxy-Skript Vor.Es heißt, es sei für die Zusammenarbeit mit den Such-APIs von Yahoo konzipiert.

Funktioniert es mit jeder Domain, wenn Sie einfach den Yahoo-API-Code herausschneiden?Oder müssen Sie es durch die Domain ersetzen, mit der es funktionieren soll?

Auf Remote-Inhalte von iFrame kann über lokales Javascript zugegriffen werden.

Der Remote-Server muss nur das festlegen document.domain der Seite.

Z.B:

Site A enthält einen Iframe mit src='Site B/home.php'

home.php sieht so aus:

[php stuff]...[/php]
[script type='text/javascript']document.domain='Site A'[/script]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top