Ich lade etwas HTML in einen Iframe, aber wenn eine Datei, auf die verwiesen wird, http und nicht https verwendet, wird der folgende Fehler angezeigt:
[blockiert] Auf der Seite unter {aktueller_Pagename} wurde unsicherer Inhalt von {referenzierter_Dateiname} ausgeführt.
Gibt es eine Möglichkeit, dies auszuschalten oder es zu umgehen?
Der Iframe hat kein src
Attribut und der Inhalt wird festgelegt mit:
frame.open();
frame.write(html);
frame.close();
Antworten:
Aufgrund der Allgemeinheit dieser Frage denke ich, dass Sie Ihren eigenen HTTPS-Proxy auf einem Server online einrichten müssen. Führen Sie die folgenden Schritte aus:
Wenn Sie einfach Remote-Site-Inhalte über file_get_contents oder ähnliches herunterladen, können Sie immer noch unsichere Links zu Inhalten haben. Sie müssen sie mit Regex finden und auch ersetzen. Bilder sind schwer zu lösen, aber ich habe hier eine Problemumgehung gefunden: http://foundationphp.com/tutorials/image_proxy.php
quelle
Die beste Lösung, die ich erstellt habe, ist, einfach Google als SSL-Proxy zu verwenden ...
Getestet und funktioniert in Firefox.
Andere Methoden:
Verwenden Sie einen Drittanbieter wie embedded.ly (aber es ist wirklich nur für bekannte http-APIs geeignet).
Erstellen Sie Ihr eigenes Umleitungsskript auf einer von Ihnen kontrollierten https-Seite (eine einfache Javascript-Umleitung auf einer relativ verknüpften Seite sollte den Trick ausführen. So etwas wie: (Sie können jede Sprache / Methode verwenden)
https://example.com
Das hat einen Iframe, der auf ...https://example.com/utilities/redirect.html
Welches hat ein einfaches js Redirect-Skript wie ...document.location.href ="http://thenonsslsite.com";
Alternativ können Sie einen RSS-Feed hinzufügen oder einen Reader / Parser schreiben, um die http-Site zu lesen und auf Ihrer https-Site anzuzeigen.
Sie können / sollten dem Eigentümer der http-Site auch empfehlen, eine SSL-Verbindung herzustellen. Wenn aus keinem anderen Grund als es SEO erhöht .
Sofern Sie den Eigentümer der http-Site nicht dazu bringen können, ein SSL-Zertifikat zu erstellen, besteht die sicherste und dauerhafteste Lösung darin, einen RSS-Feed zu erstellen, der den von Ihnen benötigten Inhalt erfasst (vermutlich tun Sie auf der http-Site tatsächlich nichts, was zu tun ist) sagen, sich nicht bei einem System anzumelden).
Das eigentliche Problem besteht darin, dass das Vorhandensein von http-Elementen auf einer https-Site ein Sicherheitsproblem darstellt. Es gibt keine völlig koscheren Wege, um dieses Sicherheitsrisiko zu umgehen. Die oben genannten sind nur aktuelle Umgehungsmöglichkeiten.
Beachten Sie, dass Sie diese Sicherheitsmaßnahme in den meisten Browsern deaktivieren können (selbst, nicht für andere). Beachten Sie auch, dass diese "Hacks" im Laufe der Zeit veraltet sein können.
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber eine andere Lösung wäre die Verwendung von cURL, zum Beispiel:
redirect.php:
dann in Ihrem iframe-Tag so etwas wie:
Dies ist nur ein MINIMALES Beispiel, um die Idee zu veranschaulichen. Es bereinigt weder die URL noch verhindert es, dass jemand anderes die Datei redirect.php für seine eigenen Zwecke verwendet. Betrachten Sie diese Dinge im Kontext Ihrer eigenen Site.
Der Vorteil ist jedoch, dass es flexibler ist. Sie können beispielsweise eine Validierung der Curl'd $ -Daten hinzufügen, um sicherzustellen, dass sie wirklich Ihren Wünschen entsprechen, bevor Sie sie anzeigen. Testen Sie beispielsweise, ob es sich nicht um einen 404 handelt, und halten Sie gegebenenfalls Ihren eigenen alternativen Inhalt bereit ist.
Plus - ich bin es ein wenig leid, mich für alles Wichtige auf Javascript-Weiterleitungen zu verlassen.
Prost!
quelle
example.com
SSL. Ich binde einen Iframe ein, mitexample.net
dem kein SSL vorhanden ist. Dasexample.com
hat einen Link wiehref="https://stackoverflow.com/path/file.html"
und während Sie darauf klicken, öffnet es sich alshttps://example.com/path/file.html
anstelle vonhttp://example.net/path/file.html
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Kopf hinzufügenquelle
In den meisten Browsern werden immer Warnungen vor blockierten Inhalten angezeigt, wenn Sie versuchen, nicht sichere Inhalte auf einer https-Seite anzuzeigen. Dies ist schwierig, wenn Sie Inhalte von anderen Websites einbetten möchten, die nicht hinter ssl stehen. Sie können die Warnungen deaktivieren oder die Blockierung in Ihrem eigenen Browser entfernen, aber für andere Besucher ist dies ein Problem.
Eine Möglichkeit besteht darin, die Seite des Inhaltsservers zu laden, die Bilder und andere Dinge auf Ihrem Server zu speichern und über https anzuzeigen.
Sie können auch versuchen, einen Dienst wie embedded.ly zu verwenden und den Inhalt über diesen abzurufen. Sie haben Unterstützung, um den Inhalt hinter https zu erhalten.
quelle
Die Verwendung von Google als SSL-Proxy funktioniert derzeit nicht.
Warum?
Wenn Sie eine Seite von Google geöffnet haben, finden Sie
x-frame-options
in der Kopfzeile ein Feld.(Zitat aus MDN)
Eine der Lösungen
Unten ist meine Arbeit für dieses Problem:
Laden Sie den Inhalt in AWS S3 hoch, und es wird ein https-Link für die Ressource erstellt.
Hinweis: Legen Sie die Berechtigung für die HTML-Datei fest, damit alle Benutzer sie anzeigen können.
Danach können wir es als
src
iframe auf den https-Websites verwenden.quelle
Sie können versuchen, alles, was Sie brauchen, mit PHP oder einer anderen serverseitigen Sprache zu kratzen, und dann den Iframe auf den kratzenden Inhalt setzen. Hier ist ein Beispiel mit PHP:
Scrapedcontent.php:
index.html:
quelle
Sie müssen lediglich Google als Proxyserver verwenden.
https://www.google.ie/gwt/x?u=[YourHttpLink] .
Es hat bei mir funktioniert.
Credits: - https://www.wikihow.com/Use-Google-As-a-Proxy
quelle
Verwenden Sie Ihren eigenen HTTPS-zu-HTTP-Reverse-Proxy.
Wenn es sich bei Ihrem Anwendungsfall um einige wenige, selten zu ändernde URLs handelt, die in die eingebettet werden sollen
iframe
, können Sie einfach einen Reverse-Proxy dafür auf Ihrem eigenen Server einrichten und so konfigurieren, dass einehttps
URL auf Ihrem Server einer zugeordnet isthttp
URL auf dem Proxyserver zugeordnet ist. Da ein Reverse-Proxy vollständig serverseitig ist, kann der Browser nicht feststellen, dass er "nur" mit einem Proxy der realen Website spricht, und beschwert sich daher nicht, da die Verbindung zum Proxy SSL ordnungsgemäß verwendet.Wenn Sie beispielsweise Apache2 als Webserver verwenden, lesen Sie diese Anweisungen , um einen Reverse-Proxy zu erstellen.
quelle
mitmproxy
ist ein Debugging-Tool, kein Produktions-Proxy-System.ngrok
ist Tunneldienst, hauptsächlich für Entwicklungsserver, ich verstehe nicht, wie es dafür nützlich sein kann.