2011-09-15 9 views
0

私はたくさんのグッズを表示する「ダッシュボード」アプリケーションを引き継いだ。iframeを使用して、サードパーティのプロキシード部門のスクリプトからページの残りの部分を保護する

表示されるものの1つは、サードパーティのウェブページのコンテンツ(自分のコンテンツを自動更新する)によって作成されるdivです。 残念ながら、インポートされたサードパーティのWebページにあるJavaScriptは、そのページ上に表示されるページ全体に影響を及ぼす/更新します。

サードパーティのページのコンテンツを自分のページに表示する方法はありますか?それと同時に、サンドボックスしているページにアクセスしたり影響を与えないようにする方法はありますか?

答えて

1

私はあなたがクロスサイトスクリプティングの制限は、Ajaxを介して外部HTTPリソースにアクセスすることを防ぐので、あなたは(インライン)フレームを使用する必要がiframe要素を使用して、それに

+0

私の質問のタイトルからわかるように、それは私が考えているものです。しかし、私はそこにそれ以上のものがあると思った。どうやらない。 – z5h

+0

サードパーティのページに '

1

をdiv要素を置くことを示唆しています。

私はフレームがスクリプトを実行するのを防ぐ1つの方法しか知らない。 Chromeはこの方法をサポートしていません。 、:(CORS, X-Access-Control-Allowなど)のコードからスクリプトタグとイベントハンドラを取り除くあなたはクロスサイト制限を回避する方法を見つけた場合

var untrusted = document.getElementById("iframe-3rd-party"); 
untrusted.designMode = "On"; //No script can be run from the frame any more. 

。 :

//xmlhttp_responsestring holds the responseText property of the XMLHttpRequest object 
xmlhttp_responsestring 
    .replace(/<script[^>]*?>\s*\/\/\s*<\[CDATA\[[\S\s]*?]]>\s*<\/script\s*>/gi, "") 
    .replace(/<script[\S\s]+?<\/script\s*>/gi,"") 
    .replace(/ o([nN])/g," &#111;$1").replace(/ O([Nn])/g," &#79;"); 

すべてのスクリプトタグ、およびアルイベントハンドラは、このように取り除かれています。スペースで始まるすべての文字を、HTMLエンティティに置き換えられ、「上」が続きます。テキストは読み込み可能で、イベントリスナーは無効です。

最後のコードスニペットは、スクリプトタグとイベントハンドラを扱うことに注意してください。 Javaアプレットやフレームなどの外部オブジェクトは扱いません。より高度なサニタイズ機能については、other answerを参照してください。

関連する問題