2009-08-16 18 views
1

だから私はDAとデシベルは、それぞれ2台の異なるサーバーSAとsBの上にホストされている二つの文書を持っています。iframeでjavascriptを取得して親文書を変更するにはどうすればよいですか?

ドキュメントのdAは、その上にフォームで文書デシベルをsrc'ingインラインフレームを開き、いくつかのJSを持っています。ドキュメントdBのフォームがサーバーsBのフォームハンドラに送信されると、ページdAのiframeを閉じる必要があります。

十分にはっきりしていることを希望します。これを行う方法はありますか?

ありがとうございます!

-Mala

UPDATE:私はこれが原因ブラウザ/ JavaScriptのセキュリティサンドボックスポリシーに可能であると想定されていない

+0

をそれは私がのdAを変更したい場合は、JSはdAのから来て持っている以下の回答から表示されます - ので、同様の質問を:私は上のボタンを持つことができますdAでフォームを送信しますか? – Mala

+0

いいえ、まだdA/sAへのアクセスなしでは不可能です。 – Mark

答えて

0

あなたのお返事ありがとうございます。

私のサーバーでは、iframeを作成したURLにリダイレクトするようにフォームに指示します。 iframeを含むサイトで、iframeの現在の位置をポーリングするsetInterval関数を追加します。

JSサンドボックスであるため、URLが外部(フォームが送信される前)の間は、このアンケートは機能しません。ただし、URLがローカル(呼び出しページのものと同一)になると、urlは読み込み可能になり、関数はiframeを閉じます。これはiframeがリダイレクトされるとすぐに動作し、追加のページロードを待つ必要はありません。

は私を助けるために非常に多くのグレッグありがとうございます:)

3

挿入JavaScriptで除いたdAまたはSAを制御することはできません。それは言われている、それは少しのハッカーでこれらの制限の外に出ることが可能です。さまざまな方法がありますが、Flashにはいくつかの方法があります。

私は可能であればこれを行うことに対して推薦するが、あなたがしなければならない場合、私は、DNSのアプローチは、ここでいうお勧めします:

http://www.alexpooley.com/2007/08/07/how-to-cross-domain-javascript/

キー抜粋:

Say domain D wants to connect to domain E. In a nutshell, the trick is to use DNS to point a sub-domain of D, D_s, to E’s server. In doing so, D_s takes on the characteristics of E, while also being accessible to D.

0

メカニズムをこれを行うには、クロスサイトスクリプティング攻撃が可能です(ページコンテンツの良質なビットを削除するだけではない)。

安全なアプローチは、それ自身を隠す/空ばかりiframeの文書に制限されますが、それを含むインラインフレームが固定されている場合に、あなただけのページ上の空白部分で終わるだろう。

+0

iframeのサイズ自体をフレームの内容に応じて垂直にするにはどうすればよいですか?これは、私がちょうどiframeに空のページを表示してそれを "削除"することができるという点で私の問題を解決するだろう – Mala

0

あなたがたdAまたはSAを制御していない場合これは、ブラウザのセキュリティ制限のために可能ではありません。 Flashメソッドでも、両方のサーバーにアクセスする必要があります。

2

は、私は、ページ全体をカバーフレームをwithingあるページAを、作成することを想定します。 Aをyourbank.comにリンクし、そのリンクをクリックします。今では、フレーム(バンキングサイト)の内容を変更するJavaScriptを使用すると、使用しているパスワードを簡単に読み取ってクッキーに保存し、サーバーなどに送信できます。

これは、同じドメインのコンテンツではない別のフレームのコンテンツを変更できないためです。ただし、同じドメインに所属している場合は、適切に修正する必要があります(両方のページがサーバー上にある必要があります)。あなたは、このコードではiframeにアクセスすることができるはず

window["iframe_name"].document.body 
2

他の人がセキュリティへの影響を説明しました。しかし問題は正当なものであり、そのためのユースケースがあり、いくつかのシナリオではあなたが望むことをすることが可能です。

W3Cは、documentのプロパティを定義し、domainと呼ばれ、セキュリティのアクセス許可をチェックします。このプロパティは、両方のドキュメントが協力して操作できるため、場合によっては互いにアクセスできます。

統治文書がDOM Level 1 Specです。 the description of documentを見てください。ご覧のとおり、このプロパティは…で定義されています。読み取り専用です。実際には、すべてのブラウザはそれを変更することができます:

変更は恣意的ではありません。通常、スーパードメインのみが許可されます。これは、共通のスーパードメインを持っている限り、2つのドキュメントを異なるサーバーで処理してお互いにアクセスできるようにすることを意味します。

したがって、2ページの通信が必要な場合は、小さな1ライナーを追加する必要があります。これはページの読み込み時に実行する必要があります。そのようなことは、トリックを行う必要があります。

document.domain = "yourdomain.com"; 

今、あなたは自分のアクセスを失うことなく、異なるサブドメインからそれらを提供することができます。

明らかにタイミングの問題を監視する必要があります。何らかの通知プロトコルを確立すれば回避できます。たとえば、あるページ(マスター)がそのドメインを設定し、別のページ(サーバー)をロードします。サーバーが操作可能な場合、サーバーはドメインを変更し、マスターにアクセスして機能をトリガーします。

+0

ちょうど信じられない。私はその技術について聞いたことがありません。 ChromeとSafariを使用すると、プレーヤのトップレベルドメインを設定者に渡すこともできます。 – user123444555621

+0

これは古いことがわかりましたが、将来参照するためにクロムがこれをブロックしているようです。今度は 'Uncaught Error:SECURITY_ERR:DOM Exception 18'を返します。 –

3

あなただけのトップレベルがクローズしたい場合、あなたはこのような何かを単に呼び出すことができます。

window.top.location = "http://www.example.com/dC.html"; 

これはdAのを閉じて、代わりにdC.htmlにユーザーを送信します。 dC.htmlは、onloadハンドラ内で実行したい(たとえば、ウィンドウを閉じる)JSを持つことができます。

0

これは少し複雑ですが、ストレートXSSのソリューションよりも正当なことがあります

あなたは、文書AにJavaScriptを書くしかし、あなたはドキュメントA内のiframeを開いている以外のサーバーを制御することはできません、ドキュメントAへの書き込みアクセスしかないことを示唆しています。これはちょっと混乱します。あなたは文書Aにjを書いているのか、それとも何らかの形で注射していますか?

いずれにしても、私は夢を見ました。 iframeを持つページをホストしているサーバーにアクセスできない場合は動作しません。

ユーザーは、iframe内のフォームにsubmitを押します。フォームが完了すると、そのフォームをホストしているサーバー上で何かが変更されます。したがって、ドキュメントAにはAJAX関数があり、フォームがまだ送信されているかどうかをサーバー側のスクリプトに確認します。もしそうであれば、スクリプトはAJAX関数に "サブミットされた"値を返します。これは別のjs関数をトリガしてiframeを閉じます。 IFRAMEを使用して、追加のサーバーサイドスクリプトを書く(これはクロスドメインの問題を回避し、以来できるサーバー上でホストされているページ上にある必要があり

  • 上記のいくつかのことを必要とし理論的にはAJAXは同じディレクトリを指しています)。

  • iframe内のサーバーには、リクエスト可能なURLが必要です。フォームが送信されたという確認が返されます。

  • "submit-check-for-submit"スクリプトは、上記のURLと、そのURLを読み込む際に何を探すべきかを知る必要があります。あなたは上記のすべてを持っている場合

、Ajaxの機能は、サーバー・スクリプトを呼び出し、サーバー・スクリプトは、フォームが行われた場合に反映URLを行くためのcURLを使用して、サーバー・スクリプトは "を探しますフォームが提出された "インジケータを検索し、それが何であるかに応じて、"未提出 "または"提出 "の回答をajax関数に返します。

たとえば、フォームはユーザー登録用です。あなたの外部の文書がフォームに入力されるユーザー名を知っているならば、サーバー側スクリプトはhttp://example.org/usernameに行き、 "ユーザーが見つかりません"というメッセージが表示されたら、まだフォームが送信されていないことを知っています。

上記の例で可能なことを超えるものは、とにかく安全で安全なものの外にある可能性があります。ユーザーがそれを提出したときにiframeを自動的に閉じることは非常に便利ですが、あなたの銀行口座が目を向ける必要があるというメールをあなたに送った可能性を考慮してください。メールには、自分が作成したページへのリンクがあります。このページには、自分の銀行のサイトのiframeがページの表示可能な部分全体を埋めるように設定されています。あなたは非常に信頼しているので、通常どおりログインします。あなたがページ上で投稿をヒットしたという事実にアクセスできれば、それはあなたが投稿したもの、またはiframeがリダイレクトされたURLにアクセスすることができたことを意味します(セッションIDが銀行がURLに含めてはならない他のデータ)。

私は説教をすることを意味しません。 1つのイベントについて知るためには、必要のない他のデータにアクセスできることがよくあります。

私はあなたの問題に少し優雅な解決策は、ユーザーがフォームで完了したときにiframeを殺す "終了"または "閉じる"と言うiframeの上にリンクを持つことだと思う。これは、ユーザーがフォームを送信したときにiframeを閉じるだけでなく、「おっと!私はこのフォームをとにかく入力したくありません。あなたの望む自動解決策では、ユーザーが提出するまで、iframeを取り除く方法はありません。

関連する問題