httpsサイトのiframe内でhttpコンテンツを許可する方法


145

いくつかのHTMLをiframeに読み込みますが、参照されているファイルがhttpsではなくhttpを使用している場合、次のエラーが発生します。

[ブロック] {current_pagename}のページで、{referenced_filename}の安全でないコンテンツが実行されました

これをオフにする方法またはそれを回避する方法はありますか?

iframeにはsrc属性がなく、コンテンツは次を使用して設定されます。

frame.open();
frame.write(html);
frame.close();


編集しました。コンテンツがiframeに書き込まれるため、srcは設定されません
georgephillips '20 / 08/20

1
すべての回答をありがとう。要するに、コンテンツのプロキシです。
georgephillips 2014

@georgephillipsは、コンテンツをプロキシするためのコードを共有しますか?
Gintas_ 2017

回答:


28

この質問の一般性に基づいて、オンラインのサーバーで独自のHTTPSプロキシをセットアップする必要があると思います。次の手順を実行します。

  • プロキシサーバーを準備する-IIS、Apacheをインストールする
  • セキュリティエラーを回避するための有効なSSL証明書を取得します(たとえば、startssl.comからは無料です)。
  • 安全でないコンテンツをダウンロードするラッパーを記述します(以下の方法)
  • サイト/アプリからhttps://yourproxy.com/?page=http://insecurepage.comを取得します

file_get_contentsまたは同様の方法でリモートサイトのコンテンツを単にダウンロードした場合でも、コンテンツへの安全でないリンクが存在する可能性があります。あなたはそれらを正規表現で見つけ、また置き換える必要があります。画像の解決は難しいですが、Ï回避策はこちら:http : //foundationphp.com/tutorials/image_proxy.php


1
iframeの背後にある多くのページがiframeに埋め込まれることを望まないため、これは機能しません。したがって、X-Frame-OptionsヘッダーをSAMEORIGINに設定します。プロキシを使用してこれをバイパスできる場合でも、ページは/insecurepage.cssのようなものをロードしようとし、ブラウザはyourdomain / insecurepage.css
解毒薬

135

注:このソリューションは、2014年に作成されたときに一部のブラウザーで機能していた可能性がありますが、機能しなくなりました。iframeHTTPSページで埋め込まれたHTTP URLに移動またはリダイレクトすることは、フレームがHTTPS URLで始まっていても、最新のブラウザーでは許可されていません。

私が作成した最善の解決策は、単にsslプロキシとしてgoogleを使用することです...

https://www.google.com/search?q=%http://yourhttpsite.com&btnI=Im+Feeling+Lucky

テスト済みで、Firefoxで動作します。

その他の方法:

  • embed.lyなどのサードパーティを使用します(ただし、よく知られているhttp APIに対してのみ有効です)。

  • 制御するhttpsページで独自のリダイレクトスクリプトを作成します(相対リンクページでの単純なjavascriptリダイレクトでうまくいくはずです。次のようなものです(任意の言語/メソッドを使用できます)。

    https://example.com これにはiframeリンクがあります...

    https://example.com/utilities/redirect.html これには、次のような単純なjsリダイレクトスクリプトがあります...

    document.location.href ="http://thenonsslsite.com";

  • または、RSSフィードを追加するか、httpサイトを読み取り、httpsサイト内に表示するリーダー/パーサーを作成することもできます。

  • また、httpサイトの所有者に、ssl接続を作成するよう勧めることもできます。それ以外に理由がない場合は、seoが増加します。

httpサイトの所有者にssl証明書を作成してもらうことができない限り、最も安全で永続的な解決策は、必要なコンテンツを取得するRSSフィードを作成することです(おそらく、実際にはhttpサイトで何も「実行」していないことになります)。どのシステムにもログインしないと言います)。

実際の問題は、httpsサイト内にhttp要素があることはセキュリティの問題を表すことです。このセキュリティリスクを完全に解決する方法はないため、上記は現在の回避策にすぎません。

このセキュリティ対策はほとんどのブラウザで無効にできることに注意してください(他のブラウザではなく自分で)。また、これらの「ハッキング」は時間の経過とともに廃止される可能性があることに注意してください。


10
すばらしい答え、ありがとう。クロムで通知するために、JSリダイレクトメソッドは機能しません(通常、ロードしようとしたときのように)。
georgephillips 2014

9
リダイレクトトリックはFirefoxでのみ機能するようです。Chromeは依然として安全でないコンテンツの読み込みを拒否します。他に既知の回避策はありますか?
Andreas Gohr 2014年

47
JSを使用していても、「管理しているhttpsページで独自のリダイレクトスクリプトを作成する」メソッドがChrom(e | ium)とFirefoxの現在のバージョンでは機能しないことを通知したかっただけです。
kako-nawao 2015

17
この回答は現在まで無効です。その他の解決策
samdd

22
回答には、「非推奨」というラベルを付けるオプションが必要です。すべてのコメントを読まないと混乱を招きます。
Nitin

28

私はこれが古い投稿であることを知っていますが、たとえばcURLを使用することもできます。

redirect.php:

<?php
if (isset($_GET['url'])) {
    $url = $_GET['url'];
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
}

次に、iframeタグで次のようにします。

<iframe src="/redirect.php?url=http://www.example.com/"></iframe>

これはアイデアを説明するための最小限の例に過ぎません。URLを無害化することも、他の誰かが自分の目的でredirect.phpを使用することを妨げることもありません。自分のサイトのコンテキストでこれらのことを考慮してください。

ただし、利点はより柔軟です。たとえば、curl'd $ dataの検証を追加して、それが表示する前に本当に必要なものであることを確認できます。たとえば、テストして、それが404でないことを確認し、独自の代替コンテンツがある場合は準備します。です。

さらに、私は重要なものをJavaScriptリダイレクトに依存することに少し疲れています。

乾杯!


4
これはかなり機能していますが、サイト内のリンクは無効になっています。たとえばexample.com、SSLを備えたというドメインがあります。example.netSSLのないiframeを埋め込みます。example.com以下のようなリンクを有しhref="https://stackoverflow.com/path/file.html"、それをクリックしながら、それはのように開いているhttps://example.com/path/file.htmlの代わりhttp://example.net/path/file.html
Sibidharan

1
これを機能させたい場合は、リンクを相対リンクにすることはできません。つまり、href内で完全なURLを指定します。これが動的である場合、JavaScriptとサーバー側でURLの各セグメントを取得するライブラリがあります。
Anthony Mason

iframeの下のターゲットサイトのCSSが壊れています。チェックしてください
Raju yourPepe

14

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">頭に追加

参照:http : //thehackernews.com/2015/04/disable-mixed-content-warning.html

ブラウザの互換性:http : //caniuse.com/#feat=upgradeinsecurerequests


23
このソリューションでは、httpsサイトでhttpコンテンツを提供することはできません。これは、httpリクエストをhttpsリクエストとして強制するだけです。リソースがhttpsに存在しない場合は、代わりに404エラーが発生します。
Felix

これは実際には少なくとも私のニーズに対しては機能します。Firefoxでテストし、機能することを確認しました。私の問題は、自分のWebサイトがHTTPSを使用しているときに、ソースURLがHTTPSに準拠していないことです。
Fernan Vecina 2017

Chromeの魅力のように動作バージョン76.0.3809.132(公式ビルド)
モハメドアズハルディン

8

安全でないコンテンツをhttpsページに表示しようとすると、ほとんどのブラウザでブロックされたコンテンツの警告が常に表示されます。これは、sslの背後にない他のサイトからのものを埋め込む場合には注意が必要です。警告をオフにするか、自分のブラウザーでブロックを解除できますが、他の訪問者にとっては問題です。

これを行う1つの方法は、コンテンツサーバー側をロードし、画像やその他のものをサーバーに保存して、httpsから表示することです。

embed.lyなどのサービスを使用してみて、コンテンツを取得することもできます。彼らはhttpsの背後にあるコンテンツを取得するためのサポートを持っています。


コンテンツをこすってサイトに表示した場合、それは常にクロスサイトスクリプティングのリスクです。したがって、神の解決策は、別のURLのコンテンツをスクレイピングし、httpsでそのURLからiframeにデータを提示することです。このようにして、メインサイトでのクロスサイトスクリプティングとセッションハイジャックを防ぎます。
Addeladde 2014年

6

SSLプロキシとしてGoogleを使用することは現在機能していません、

どうして?

googleからページを開いた場合x-frame-options、ヘッダーにフィールドがあります。 Google応答ヘッダー

X-Frame-Options HTTP応答ヘッダーを使用して、ブラウザーで<frame><iframe>またはのページをレンダリングできるかどうかを示すことができます<object>。サイトはこれを使用して、コンテンツが他のサイトに埋め込まれないようにすることで、クリックジャッキング攻撃を回避できます。

(MDNからの引用)

解決策の1つ

以下は、この問題の回避策です。

コンテンツをAWS S3にアップロードすると、リソースのhttpsリンクが作成されます。
注意:htmlファイルにパーミッションを設定して、全員が閲覧できるようにします。

その後src、httpsウェブサイトのiframe として使用できます。 AWS


2

PHPまたは別のサーバー側言語で必要なものをスクレイピングしてから、スクレイピングしたコンテンツにiframeを配置することができます。PHPの例を次に示します。

scrapedcontent.php:

<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>

index.html:

<iframe src="scrapedcontent.php"></iframe>

3
画像、インクルードされたJSおよびCSSファイル、ハイパーリンク、AJAXリクエストをどのように処理しますか?
dotancohen 2014年

@dotancohen正解です。完璧な解決策ではありませんが、この状況に最適です。あなたが議論した問題に遭遇しないいくつかのサイト。
Grant

1
これは機能しますが、コンテンツを効果的に2度ロードするため、サーバーがコンテンツを
スクレイピングし


1

独自のHTTPS-to-HTTPリバースプロキシを使用します。

ユースケースが少数であり、めったにURLを変更せずにに埋め込む場合はiframe、独自のサーバーでこれに対するリバースプロキシを設定httpsし、サーバー上の1つのhttpURLがプロキシサーバー上の1つのURLにマップするように構成できます。リバースプロキシは完全にサーバー側であるため、ブラウザは実際のWebサイトのプロキシと通信しているだけであることを認識できず、プロキシへの接続でSSLが適切に使用されているため、文句を言いません。

たとえば、Apache2をウェブサーバーとして使用している場合は、以下の手順を参照してリバースプロキシを作成してください。


1
mitmproxyデバッグツールであり、プロダクションプロキシシステムではありません。ngrokトンネルサービスであり、主に開発サーバー用ですが、これがどのように役立つのかわかりません。
kolen

@kolenそれはツールについてではなく、他の回答でまだ言及されていない、このためにリバースプロキシを使用するという考えについてです。今すぐApacheに変更します。これは、リバースプロキシを行うためのより一般的な方法です。
タニアス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.