Browsersicherheit bei window.opener umgehen
Christian Wolf
- javascript
Hallo Allerseits,
Eigentlich keine Frage sondern einen 'Entdeckung' die ich noch nicht anderswo finden konnte:
Ich hatte das Problem dass ich aus einem Formular ein Fenster geöffnet habe in dem HTML von einer anderen Domain geladen wurde. Aus diesem 'externen' Fenster wollte ich nun Daten zurück an das ursprünglich 'interne' Formular zurückschicken. Daraus wird so leider kein Schuh draus, da es gegen die Sicherheitsbestimmungen der (meisten) Browser verstößt. Wenn es sich bei der 'externen' Domain lediglich um eine Subdomain haldelt, kommt man mit document.domain weiter. Leider ist das bei mir nicht der Fall.
Mein derzeiter Workaround-Versuch: anstatt das externe HTML in das neue Fenster zu laden, lade ich eine PHP Datei mir folgendem Inhalt:
<?PHP
echo join('',file ('http://www.externe_domain.com.br/file.html'));
?>
Somit habe ich den Inhalt der 'externen' Seite auf einer für den Browser als 'intern' erkannten Seite und kann hieraus über window.opener auf das ursprüngliche Formular zugreifen.
Das knifflige fängt jetzt aber erst an, da es sich bei der externen Seite ebenfalls um PHP handelt und dynamisch verarbeitet wird. Ich muss also kräftig mit Variablen jonglieren.
Wenn ich dabei nicht den Verstand verliere erzähle ich wie es weitergeht.
Soltle es sich hierbei um einen alten Hut handelt, bitte einfach ignorieren.
Christian
Hallo Christian,
Das knifflige fängt jetzt aber erst an,
Nein.
da es sich bei der externen Seite ebenfalls um PHP handelt und dynamisch verarbeitet wird.
Na und? Wenn Du eine Datei mit file ('http://....'); einliest, dann baut PHP eine Verbindung zum Zielserver auf und fungiert wie ein Webbrowser. Ob diese externe Seite mit PHP, ASP, JSP, Ruby, Python, SHTML, Perl gemacht ist oder auch einfach nur statisches HTML ist, kann Deinem PHP also genauso egal sein wie Deinem Browser.
Oder habe ich Dich falsch verstanden?
Viele Grüße,
Christian
Grüß dich Christian (vorsicht vor der Schizphrenie :-)
Das knifflige fängt jetzt aber erst an,
Nein.
...
Oder habe ich Dich falsch verstanden?
Beim einmaligen aufrufen ist das richtig. Die PHP Datei enthält aber ein weiteres Formular dass sich selbst aufruft. Wenn es das also tut, dann haben wir aber bereits die heimische Domain verlassen.
Ich muss also immer die lokale 'Gateway'-Datei laden über die dann die gewünschte Seite geladen wird. Dabei muss ich noch ca. ein Duzend Parameter übergeben und zwar zwei mal: einmal an die 'Gateway'-Datei und von der wider an die eigentliche Seite.
Schwierig zu formulieren, vor allem wenn ich es selbst noch nicht so ganz auf die Reihe gebracht habe...
Grüße aus Brasilien,
Christian
Hallo Christian,
Beim einmaligen aufrufen ist das richtig. Die PHP Datei enthält aber ein weiteres Formular dass sich selbst aufruft. Wenn es das also tut, dann haben wir aber bereits die heimische Domain verlassen.
Ich muss also immer die lokale 'Gateway'-Datei laden über die dann die gewünschte Seite geladen wird. Dabei muss ich noch ca. ein Duzend Parameter übergeben und zwar zwei mal: einmal an die 'Gateway'-Datei und von der wider an die eigentliche Seite.
Wenn das Formular per GET übergeben wird, dann dürfte das kein Problem darstellen - Du kannst einfach die Variable $_SERVER['QUERY_STRING'] an die URL ranhängen.
Wenn Du POST-Daten hast, dann hilft Dir vielleicht das hier weiter: http://www.dclp-faq.de/q/q-code-post.html (Beispiel), http://www.w3.org/Protocols/rfc2616/rfc2616.html (HTTP-Standard) An die Rohen POST-Daten kommst Du über fopen ('php://input', 'r') heran. (siehe http://de3.php.net/wrappers.php)
Dann hast Du noch das Problem mit den Links und Verweisen, die das externe Script erzeugt. Du hast zwei alternativen: 1. Du lässt das externe Script die Ausgabe bereits in der richtigen Form produzieren. (als ob es ein 'internes' Script wäre) 2. Du holst Dir erst den Inhalt und wendest dann Ersetzungsfunktionen darüber an, damit die URLs richtig beim Browser ankommen.
Ich hoffe, ich konnte Dir helfen.
Viele Grüße,
Christian