安全でないJavaScriptがURLでフレームにアクセスしようとする


112

別のドメインURLを含むiframeから親URLにハッシュ値を設定しようとすると、以下のエラーが発生します。

安全でないJavaScriptが、URL「URL2」のフレームからURL「URL1」のフレームにアクセスしようとしました。ドメイン、プロトコル、ポートが一致している必要があります。

この問題を解決するにはどうすればよいですか?


3
詳細は、コードスニペット、エラーメッセージを追加してください、フレームワーク、あなたが使用し...もっと冗長、詳細...
fifigyuri

5
iframeに読み込まれ、同じエラーをスローするg + 1、facebook likeまたはshre、twitterソーシャルプラグインを実装するとどうなりますか?

問題は、FacebookとGoogleのスクリプトがWebサイトの要素にアクセスしようとしている理由です。
セルジオ2014

回答:


124

異なる起源の子ドキュメントからは、トップウィンドウのlocation.hashプロパティへのアクセスは許可されませんが、locationプロパティ自体の設定は許可されます。

これは、上部ウィンドウの場所がであるhttp://example.com/page/場合、

parent.location.hash = "#foobar";

あなたは両親の場所を知っている必要があります

parent.location = "http://example.com/page/#foobar";

リソースはナビゲートされないため、これは期待どおりに機能し、URLのハッシュ部分のみを変更します。

これをクロスドメイン通信に使用している場合は、代わりにeasyXDMを使用することをお勧めします。


13
これを回答としてマークした人はいませんが、60の賛成票があります。これにはバッジが必要です。
zachzurn 2013年

35
バッジは何と呼ばれますか?「怠惰な人への対応」
nzifnab 2013年

1
@atulさん、親切にして、この回答を最高の回答としてマークしてください。私たち全員が他人の知識から利益を得られるようにする規則に敬意を払います...
クリントイーストウッド

13

2つのフレームのドメインが異なる場合、クロスフレームスクリプティングはできません->セキュリティ。

これを参照してください:http : //javascript.about.com/od/reference/a/frame3.htm

ここであなたの質問に答えてください:解決策や回避策はありません。単に、他のドメインのURLを変更する異なるドメインからの2つのフレームが必要な理由をウェブサイトのデザインで確認するだけです。


82
これは、サードパーティのアプリケーションをWebサイトに埋め込む場合によくある要件です。特に、Webサービスなどを利用できない場合はそうです。
ジャック

9

iframe.srcのドメインを変更しようとすると、同じエラーメッセージが表示されました。

私にとっての答えは、iframe.srcを同じドメインのURLに変更することでしたが、実際には、目的のドメインへのHTMLリダイレクトページでした。次に、他のドメインがエラーなしでiframeに表示されました。

魅力のように働いた。:)


ここで何をしたか正確に説明していただけますか?
Devin G Rhode

簡単に説明できると助かります。
Madhusudhan

2
最新のChromeでは機能しません。srcパラメータはチェックされませんが、実際のURLが読み込まれます。そのため、残念ながらリダイレクトトリックはまったく役に立ちません:-(
lucaferrario

3
トミーが言っているのはサーバーサイドプロキシだと思います。たとえば、benalman.com / projects / php-simple-proxyまたはdeveloper.yahoo.com/javascript/howto-proxy.htmlまたはgoogle.com/…、またはstackoverflow.com/a/11224975/27938
Oskarを

それは素晴らしいです。しかし、これは、これを回避することがいかに一般的であるかを示しているだけです。さて、私が悪意のある悪意のあるハッカーであり、クロスドメインスクリプティング攻撃を実行したいとします。これらのツールについて知り、使用する可能性があります。ブラウザのセキュリティ修正に関する限り、これはIEが警告なしにローカルでJavascriptを実行できないようにするのと同じくらい簡単に遅れます。問題はありません。新しいものの束を作成します。
Yitzhak 2013年

6

解決策は、リモートコンテンツを取得するローカルファイルを使用することです。

remoteInclude.php

<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;

HTML

<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
    $("#frametest").load(function (){       
    var contents =$("#frametest").contents();
});


1
これは、クロスサイトスクリプティングの脆弱性の扉を開きます。 考えられる攻撃の例: 1. myevilserver.comにPOSTしてmyevilserver.comに戻るログインフォームを含む、あなたのサイトと同じように見えるページをmyevilserver.comに作成します2. へのリンクを含む偽のニュースレターをユーザーに送信しますhttps:// yoursite.com/remoteInclude.php?url=myevilserver.com 3. サーバーでキャプチャしたサイトのログインフォームが表示されます。
EricP 2013

2
可能な解決策は、remoteInclude.phpに、事前に承認されたドメインのリストに対してすべてのURLをチェックさせることです。
EricP 2013

これはクロスサイトスクリプティングの脆弱性の問題を解決しません。私が外部Webサイトに対してJavaScriptを使用して実行できることは、サーバー側から実行できないことはまったくありません。これはすべて、ブラウザ自体を妨害するだけであり、追加の手順を導入することによってWebアプリの有用性を低下させます。ajaxを介してロードし、リンクを書き直し、ポストバックすれば、これらすべてを行うことができます。それが機能しない場合は、phpまたは任意の言語を介してリモートrpcします。これが平均的なコーダーにとってさえ問題であることはばかげています。
Yitzhak 2013年

3

HTML5バージョンの代わりにFacebookのようなボタンのXFBMLバージョンを使用すると、この問題が修正されることがわかりました。ボタンを表示する場所に以下のコードを追加します。

<div id="fb-root"></div>
<script>(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>

次に、これをHTMLタグに追加します。

 xmlns:fb="http://ogp.me/ns/fb#"

2
Facebookはこの質問と何をしているのですか?
Kukks、

16
ボタンのようなFacebookでもこのエラーが発生し、回答を検索しているときにこのページが見つかりました。
ルークアルダートン、

1

問題は、プロキシを作成したり、コンテンツを読み込んでそれをローカルであるかのように注入したりしても、そのコンテンツが定義するスクリプトが他のドメインから読み込まれ、クロスドメインの問題が発生することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.