2 Stimmen

JavaScript - Cross Site Scripting - Erlaubnis verweigert

Ich habe eine Webanwendung, für die ich versuche, die OAuth-Funktionalität von Twitter zu nutzen. Diese Anwendung enthält einen Link, der den Benutzer zur Eingabe seiner Twitter-Anmeldedaten auffordert. Wenn ein Benutzer auf diesen Link klickt, wird über JavaScript ein neues Fenster geöffnet. Dieses Fenster dient als Dialog. Dies wird wie folgt erreicht:

HauptSeite:

<div id="promptDiv"><a href="#" onclick="launchDialog('twitter/prompt.aspx');">Provide Credentials</a></div>

...

function launchDialog(url) {
  var specs = "location=0,menubar=0,status=0,titlebar=0,toolbar=0";
  var dialogWindow = window.open(url, "dialog", specs, true);
}

Wenn ein Benutzer auf den Link klickt, wird er von der Seite prompt.aspx auf die Website von Twitter umgeleitet. Auf der Twitter-Website hat der Benutzer die Möglichkeit, seine Twitter-Anmeldedaten einzugeben. Wenn er seine Zugangsdaten eingegeben hat, wird er wieder auf meine Website umgeleitet. Dies wird durch eine Callback-URL erreicht, die für Anwendungen auf der Twitter-Site festgelegt werden kann.

Wenn der Rückruf erfolgt, wird der Benutzer zu "/twitter/confirm.aspx" auf meiner Website im Dialogfenster weitergeleitet. Wenn dies geschieht, möchte ich den Inhalt von "promptDiv" so aktualisieren, dass er "Sie haben sich erfolgreich mit Twitter verbunden" lautet, um den Link zu ersetzen und den Dialog zu schließen. Dies dient dem Zweck, den Benutzer darüber zu informieren, dass er diesen Schritt erfolgreich abgeschlossen hat. Ich kann das Dialogfenster erfolgreich schließen. Wenn ich jedoch versuche, das HTML-DOM zu aktualisieren, erhalte ich eine Fehlermeldung, die besagt: "Error: Permission denied to get property Window.document". Um das HTML-DOM zu aktualisieren, habe ich versucht, das folgende Skript in "/twitter/confirm.aspx" zu verwenden:

// Error is thrown on the first line.
var confirmDiv = window.opener.document.getElementById("confirmDiv");
if (confirmDiv != null)
{
  // Update the contents
}                
window.close();

Ich habe dann versucht, den HTML-Code zu lesen, um zu sehen, ob ich mit dem folgenden Skript überhaupt auf das DOM zugreifen kann:

alert(window.opener.document.body.innerHTML);

Als ich dies versuchte, erhielt ich immer noch die Fehlermeldung "Berechtigung verweigert". Ich weiß, dass dies etwas mit Cross-Site-Scripting zu tun hat. Ich weiß jedoch nicht, wie ich das Problem beheben kann. Wie kann ich dieses Problem beheben? Habe ich meine Anwendung falsch strukturiert? Wie aktualisiere ich das HTML-DOM, nachdem ein Benutzer zu meiner Website zurückgeleitet wurde?

Vielen Dank für Ihre Hilfe!

1voto

mwilcox Punkte 3866

Wenn das Popup die Twitter-Authentifizierungsseite öffnet, verlieren Sie Ihre ursprüngliche Fähigkeit, mit dem Winodw zu kommunizieren, da sich seine Dokumentendomäne geändert hat und der window.opener zurückgesetzt wurde.

Um dies für SitePen's NetFlix Queued zu umgehen, habe ich einen Timer verwendet und das Popup-Fenster auf Änderungen an seiner Position abgefragt (auf die Sie weiterhin zugreifen können). Wenn es auf eine Fehler- oder Erfolgsseite ging, wusste ich das und konnte das Popup-Fenster schließen (Sie haben die Kontrolle über das Fenster, aber nicht über das DOM) und den Inhalt der Hauptseite ändern, um den Status der Autorisierung wiederzugeben.

Wir haben auch überprüft, ob das Fenster geschlossen wird, falls der Benutzer das Popup nicht autorisiert und schließt.

Wir konnten den Rückruf nicht nutzen, da dies in Adobe AIR geschah und es keinen Server gab, zu dem wir zurückrufen konnten, was eine zusätzliche Hürde darstellte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X