2010-07-26 4 views
5

Ich habe eine HTTPS-Seite (https://example.com/main.php) mit einem Iframe mit einer Nicht-HTTPS-Quelle (http://example.com/inner.php). Beide Dateien befinden sich auf demselben Server - nur einer wird mit https und der andere nicht aufgerufen. Ich brauche das nicht-https-Seite der Lage sein, Javascript main.php Seite auf dem https wie parent.myfunction() mit CodeHTTP-iFrame zum Aufrufen von JavaScript im HTTPS-Eltern-Frame zulassen

jedoch auszuführen, wenn ich das versuche ich die folgende Fehlermeldung erhalten:

Unsafe JavaScript attempt to access frame with URL https://example.com/main.php from frame with url http://example.com/inner.php . Domains, protocols and ports must match.

I gesetzt haben document.domain = 'example.com' auf beiden Dateien und ich dachte, das würde es beheben, aber es tut es nicht. Gibt es eine Möglichkeit, den Rahmen Javascripts auf dem übergeordneten Frame ausführen zu lassen und umgekehrt? Wenn ja, welche Auswirkungen hat dies auf die Sicherheit?

PS: Für diejenigen von Ihnen, die vorschlagen, nur https oder http für beide Seiten verwenden, bin ich dabei. Aufgrund der Prozesse, die auf der Iframe-Seite auftreten, ist dies jedoch aufgrund von Problemen mit der Serverauslastung möglicherweise keine praktikable Option.

Antwort

5

Die "Same Origin Policy" deckt das Protokoll ("http" oder "https"), den Hostnamen und die Portnummer ab. Alle diese müssen übereinstimmen oder Sie verlieren.

Wenn Ihre Serverlast wirklich von der Anwendung der Verschlüsselung auf die Seite betroffen wäre, dann vermute ich, dass Sie andere, weit ernstere Probleme haben. In der heutigen Zeit sollte das kein Thema mehr sein. Wenn Sie eine stark frequentierte Website haben, sollten Sie wahrscheinlich trotzdem ein Front-End verwenden, um SSL zu verwenden.

0

Sie können keinen domänenübergreifenden/protokollübergreifenden/Cross-Port-Zugriff mit JavaScript ausführen. Dies ist bekannt als "Cross-Domain-Scripting", was ein Problem darstellt, da ich ohne diese Sicherheit GMail in einem Iframe öffnen, die Textfelder "u" und "p" abrufen und die Login-Daten eines Benutzers so haben könnte.

Was Sie in Ihr PS stecken, ist die einzige echte Lösung, die Sie neben der Verwendung eines Echo-Servers verwenden können ... was übertrieben wäre.

4

Wenn es jemals möglich wäre zu tun, was Sie tun möchten, wäre keine SSL-gesicherte Website jemals sicher.

Lassen Sie mich das Problem beschreiben. Nehmen wir an, ein Benutzer, Alice, möchte auf Paypal.com auf ihr Konto zugreifen. Ich, Mallory, bin zwischen Paypal und Alice. Als Alice auf Paypal zugreift, nehme ich ihre Anfrage ab und gebe eine Seite zurück, die zwei Dinge enthält: ein Bild mit https://paypal.com und eines mit einer Seite, die angeblich "http://my.paypal.com" ist, die ich selbst angefertigt habe. Der HTTPS-Rahmen ist gültig, da er tatsächlich von Paypal stammt. Der HTTP-Frame enthält etwas Javascript meines Geräts, das in den HTTPS-Frame gelangt, und wenn Alice ihr Passwort eingibt, sendet es es mir!

Also nein, es ist nicht in Ordnung, auf sichere Inhalte aus unsicheren Inhalten zuzugreifen, sogar auf derselben Domain.

+0

Ihr Beispiel funktioniert nicht: Es ist nicht möglich, die Domäne "my.paypal.com" zu verwenden, da die Domäne _whole_ (mit allen vorhandenen und nicht vorhandenen Subdomains) zu paypal gehört. Meiner Meinung nach ist das nicht der Grund für diese Sicherheitsbeschränkung. Der Grund ist der gleiche, als ob Sie Inhalte über http auf einer https-Site laden möchten. – rudi

+1

@Rudolf Ich glaube nicht, dass du völlig verstanden hast, was ich gesagt habe. Der Angreifer gibt eine Seite mit zwei * Frames * zurück. Ein Frame enthält das Bona-Fide https://paypal.com. Der andere enthält bösartiges JavaScript. Das bösartige Javascript "wurde von paypal.com geliefert" - aber ich habe die Anfrage abgefangen und den von mir gewünschten Inhalt zurückgegeben (möglich, weil es keine sichere Verbindung ist).Die beiden Frames "bestehen also denselben Check", aber das Ergebnis ist ein Desaster. – Borealid

Verwandte Themen