過去ログ表示


過去ログ 388 を表示

トピック内全 6 記事中の 1 〜 6 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0]

iframeのsandboxが機能しません
(#57421) このトピック中1番目の投稿
(環境: Win 7/Other)

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0

Firefox24を使用しています。
以下のように、iframe内にhttp://wikiwiki.jp/内のページを読み込んだ場合に、sandbox属性を記述しているにもかかわらず、子フレームから最上位のウインドウが操作されてリダイレクトしてしまいます。
なぜこの様な事が起こってしまうのか自分なりに調べてみましたがよく分からず、夜も眠れません。
既知の問題なのでしょうか?何か情報がありましたら、お教えください。
よろしくお願いいたします。

<iframe src="http://wikiwiki.jp/sample/" sandbox="allow-scripts allow-forms">

Re: iframeのsandboxが機能しません
(#57423) このトピック中2番目の投稿
(環境: Other/Other)

このJSに window.open() があるので、
どこかで使っているのでしょう。
http://public.wikiwiki.jp/js/default.js

次の2つをテストして感想ください。
<iframe src="http://wikiwiki.jp/sample/" sandbox="">
<iframe src="http://wikiwiki.jp/sample/" sandbox="allow-forms">

Re: iframeのsandboxが機能しません
(#57424) このトピック中3番目の投稿
(環境: Win 7/Other)

ピピさま、返信ありがとうございます。
もちろん、その2つでは何も起こりません。

いろいろ試した結果、kanzaki.jsの
function noframe()
{if(top.frames.length>0)top.window.location=self.window.location;}
が良くないようです。

確かに別ドメインからフレームで読み込むことはあまり行儀がよくないことですが、
これはsandboxの理念上あまり良くない現象です。

Re: iframeのsandboxが機能しません
(#57425) このトピック中4番目の投稿
(環境: WinXP SP3/Other)

>> いろいろ試した結果、kanzaki.jsの
> function noframe()
> {if(top.frames.length>0)top.window.location=self.window.location;}
> が良くないようです。

bugzilla.mozilla.orgを「sandbox」で検索した中で、locationに関連するものは、2008-10-08 オープンの bug-org 459146 くらいですね。
この中で、sandboxのiframeでも、現時点では、新規にコンテキストを作るのではなく、現在のwindowをそのまま使うようになっていて、新規にコンテキストを作るようにするか、アクセスがあったときに拒否するようにするしかしかない、というようなことを言っています。
多分、今でも、現在のwindowがコンテキスト、なんでしょう。
現在のwindowがコンテキストだから、トップウィンドウにwindow.topでアクセスできても当然。

windowは、DOMのオブジェクトでもECMAScriptのオブジェクトでもなくて、BrowserのJavaScriptのオブジェクトで、
windw.locationは、元来が、現在のURLという属性値を表示する、ただの属性であって、メソッドではなくて、この内容をJavaScriptで変えると変更後のものを勝手にロードするのは、ブラウザー。
window.locationをセットしたらそれをロードしなければならない、というような規定は無く、今の多くのブラウザーはwindow.locationをセットするとそれをロードするようになっている、というだけの話のはず。

sandboxは、_topにある文書の内容を変えることを禁止しているだけで、文書と直接関係のないwndowオブジェクトそのものは制限を受けない、とも言えますし、parentについては禁止していないのだから、window.parent、window.parent. ... .parentとたどっていけば制限されない、というような話もでてきそう。

それに、sandbox="allow-scripts" にしたが最後、スクリプトで、穴をくぐって、<iframe>の属性を変えてsandbox属性なしと同じにしてしまう、という道も開けてくるわけで、多くのsandboxの説明文書では、sandbox=""で使うのが基本で、使うのなら、単に内容を表示するためだけに<iframe sandbox="">を使うように、と書いてあるようです。
今の時点では、素性のわからない外部サイトを<iframe>にロードしておきながらsandbox="allow-scripts"にするようなWebデザイナーが悪い、という話になるのかもしれません。

他のブラウザー、たとえばGoogle Chromeだと、どうなりますか?

> 確かに別ドメインからフレームで読み込むことはあまり行儀がよくないことですが、
> これはsandboxの理念上あまり良くない現象です。

sandboxは、トップの文書の内容を変えることを禁止していますが、Firefoxにおいては、現在のページのデータはBFCacheのエントリーAに保持されていて、top.window.locationによるページをBFCacheの別のエントリーBに保持して、そのタブでエントリーBを表示しているだけだから、「トップの文書の内容を変える」にはあたらない、というようなこともあるかもしれません。

IFRAMEの中のコンテキストを新規のwindowにすれば、IFRAMEの中でそれ自身がwindow.topになって、IFRAMEの外側にはアクセスできなくなる、ということは、デベロッパーは既に十分承知しているが、それをやると、allow-top-navigation や allow-same-origin のサポートが非常に困難になるので、まだ放置している、ということに思えます。
<iframe sandbox="allow-scripts"> とIFRAMEの中の top.window.location=self.window.location; だけで簡単に現象を再現できて、「sandboxの理念上あまり良くないから、直すべきだ」とお考えならば、bugzila.mozila.orgにバグを開くといいでしょう。

<iframe sandbox="allow...">で、sandbox=""だと、何が禁止されているか、はかなり明確であるといえますが、sandbox="allow..." 特に sandbox="allow-scripts"の場合は、JavaScriptの何は許可されるが何は許可されない、なんてなことは、厳密に規定されているとは、到底思えません。
こういった「全てブラウザーが良きに計らえ」ってな、ものすごく曖昧な仕様だから、判明した「sandboxの理念上あまり良くないこと」を、一個づつ報告していくしかないと思います。
allow-scriptsの時だけは、IFRAMEの中のコンテキストを新規のwindowにし、allow-same-origin の時の挙動がsandboxなしの<iframe>とは少し変わってくることを許容する、というような変更をするかもしれません。

Re: iframeのsandboxが機能しません (bug-org 785310 ですね)
(#57426) このトピック中5番目の投稿
(環境: WinXP SP3/Other)

追記。

既に報告されていました。
「sandbox」でヒットした中の bug-org 785310 が、IFRAMEの中のtop.location でページ移動させることができる問題の報告でした。
> html5 sandboxed iframe should not be able to perform top navigation with scripts allowed

Re: iframeのsandboxが機能しません (bug-org 785310 ですね)
(#57427) このトピック中6番目の投稿
(環境: Win 7/Other)

WADAさま、私にはほとんど理解できませんでしたが、ありがとうございます。
既知の現象だったんですね、安心しました。
解決?いたしました。
済!

このトピックの全ページ / [0]

返信不可


- Child Tree -