2012-05-25 8 views
10

私はiframeアプリケーションのための選択的フレームバーストを実装したいと思います。選択的フレームバースト

私のiframeは私のiframeをホスティングしている第三者のウェブサイトは、(PayedWebsited1.con OR PayedWebsited2.con)であるとlic=1234オプションも存在している場合は、インラインフレームを表示www.mywebsite.con/iframe.aspx?lic=1234

でご利用いただけます。他の詐欺師の場合は、バナナを表示してください!

どうすればいいですか?

+0

これを確認し、それに従った内容を処理するには、サーバー側の言語が必要です。可能な 'lic ='をあなたのJSに保存しない限り、誰もがそれらを読むことができます。 – pduersteler

+0

こんにちは、私に小さなサンプルを提供できますか? – OrElse

答えて

-1

Global.asaxでした!

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
     Dim ref As String = HttpContext.Current.Request.ServerVariables("HTTP_REFERER") 
     If Not ref.Contains("PayedWebsited1") And Not ref.Contains("PayedWebsited2") Then 
      Response.Redirect("MYDOMAIN", True) 
     End If 
End Sub 

ありがとうございます!

+0

これにはJavaScriptは含まれていないため、これはフレームを破棄するものではありません。フレームの内部で、REFERER = some_siteでリクエストを受け取ります。次にリダイレクトするので、リダイレクト直後にフレーム内で同じページが表示されます。今すぐREFERER = your_siteとページが表示されます。それはまだフレームの中です。 –

0

セキュリティのため、ブラウザでは、JavaScriptを使用して親ページ(ページを表示するiframeを含むページ)のURLを検出することはできません。私は考えることができる

唯一の解決策は以下のとおりです。

  1. があなたのiframe.aspxページのユーザーは、彼らが使用しているドメインを述べ、追加のGETのparamが含まれていることを主張します。
  2. 使用しますが、レンダリングページでリファラ

を得るために、あなたは、あなたがあなたのページをフレーミングから人を防ぐためにしたいべきであるとリテラルを持っている必要がありRequest.UrlReferrer、あなたは単に必要なJavaScriptを追加することができますフレームを強制する。

は、残念ながら、Javascriptが無効になっている場合、これはあなたのコードは役に立たないレンダリングします...

は、この情報がお役に立てば幸いですか!

protected void page_load(object sender, EventArgs e) 
{ 
    bool killFrames = false; 
    if(Request.QueryString["lic"] == null) 
     killFrames = true; 
    if(!killFrames && Request.UrlReferrer != null) 
    { 
     // do some database check against the LIC and Referrer 
     // and set killFrames accordingly. 
    } 
    if(killFrames) 
    { 
     literalFrame.Text = "<script type=\"text/javascript\">if(top.location != location) { top.location.href = document.location.href; }</script>"; 
     // or show the bananas 
    } 
    else 
    { 
     // render the page accordingly. 
    } 
} 
0

私は私の知る限りでは、すべてのWebブラウザで行うセキュリティ対策のために不可能である、あなたの一般的な問題の解決策ではなく、この特定の技術的な問題を、指すようにしようとします。


あなたは自分のアプリとあなたとの間に何らかの手を握る必要があり、それはサーバ側で行うことができます。

すべてPayoodWebsiteはパスワードを持っている必要があります(静的IPを使用している場合はそれを使用できます)。サーバー上で内部的に(CURLを使用している可能性があります) iframeで使用されているトークンを返します。

iframe.aspx?lic=1234&token=d16evg5tr44e0trty45xp6es5 

トークンは1回のみ動作します。 iframeを開く必要があるたびにプロセスを繰り返す必要があります。また、有効なトークンを含まないすべての接続を拒否します。

4

問題は、サーバー側のソリューションを使用するのかJavaScriptを使用するのかにかかわらず、ライセンス番号は何ら助けになりません。 CheetersはPayedWebsite1.comのライセンス番号を見ることができます。

親フレームの位置は取得できませんが、ページがiframeに読み込まれている場合は、親フレームと同じ参照先を取得できます。

if (window.top.location !== document.location) { // only if we're in iframe 
          // we get host of our referrer 
    var host = document.referrer.match(new RegExp("(http|https)://(.*?)/.*$"))[2]; 
    host = host.toLowerCase(); // convert to lower case 
    var myHost = document.location.host.toLowerCase(); 
    if (
     host !== myHost     // so we can click on links in an iframe 
     && host !== 'payedwebsite1.com' 
     && host !== 'payedwebsite2.com' 
    ) { 
     window.top.location.href = document.location.href; 
    } 
} 

この手法は妥当であることに注意してください。http://javascript.info/tutorial/clickjacking

の詳細情報は、新しいブラウザでは、特別なヘッダを送信することができます

ロジックは、サーバー側で、同じ続けます。参照元を確認し、PayedDomainまたは自分のドメインの場合は、そのまま続行します。それ以外の場合は、このヘッダーを送信します。

+0

こんにちは、あなたのソリューションを試しましたが、iframeはpayedwebsite1.comで全画面表示されています。 – OrElse

+0

ドメインは "payedwebsite1.com"と正確に一致する必要があります(例:www.payedwebsite1.com)。私はあなたの問題を見ることなく、これ以上の情報を与えることはできません - あなたはリンクを与えることができますか?私はそれをローカルでテストし、うまくいきました。 console.log(host)のようなコードを内部で変更することでデバッグできます。または警告(ホスト)。 –

+0

また、payedwebsite.comがHTTPSでiframeがHTTPの場合、リファラーは送信されません。 –

0

私は.NETのエキスパートではありませんが、iframeコンテンツの読み込み時にクライアントがページに送信する参照ヘッダーを追跡することで、ソリューションを簡単に解決できるようです。

あなたはヘッダを参照してくださいに関する別の質問を参照することもできます。 how should we validate http header referrer in aspx .net

基本的に、あなたは以下の

  1. 見上げドメイン名
  2. を取得するために紹介ヘッダーを使用するだろうデータベースのドメイン名(そのサイトのライセンスがあるかどうかを確認するため)
  3. 一致する結果に応じて、実際のページまたはバナナを送信します。
+0

実際のセキュリティを必要とするものは信頼できません(簡単になりすまします)。私はOPがユーザーが逃げることのできないものを望んでいると思う。 – Brilliand

+1

セキュリティ対策ではないと思いますが、iframe制限 - リファラーのみがこの状況でOKです。リファラー・スプーフィングには意味がないので、iframe以外で開いてもページの内容は引き続き表示されます。 iframeページ(?)で偽装する方法がない限り、 –

+0

参照元は簡単に偽装されるだけでなく、善意のセキュリティソフトウェアによって要求から頻繁に削除されます。 – jatrim

3

サードパーティのユーザーがJavaScriptのファイルが含まれる、または理想的に前のページを描画するASPに要求を送信することが可能であるならば、これは私がどうなるのかです:

Javascriptを

  1. データベース内のアカウントに一致するようにリファラーとライセンス番号を確認するサーバー上のASPページを作成します(私の例はPHPです)。 ASPファイルは、生成した「ワンタイム使用」キーを使用して、指定したiframeを置換または挿入するjavascript関数を出力します。ファイルには、次のようになります。あるページで

    <script src="http://www.yoursite.com/preauth.php?lic=1234"></script> 
    <script>drawIframe();</script> 
    <div id="iframe_target"></div> 
    
  2. <?php 
    $lic = $_GET['lic']; // Do better validation (short for demo purposes) 
    if (valid_license($lic, $_SERVER['HTTP_REFERER'])) { 
        $one_time_key = get_access_key($lic); 
        ?> 
        function drawIframe() { 
         document.getElementById('iframe_target').innerHTML = "<iframe src='mysite.php?key=<?php echo $one_time_key;?>'></iframe>"; 
        } 
        <?php 
    } 
    else { 
        echo "You are not authorized to use this service."; 
    } 
    
  3. は、あなたの顧客を持っているこれと同様の方法で、あなたのiframeの代替として、このJavaScriptコードが含まれますiframeによって読み込まれた場合は、生成したキーをiframeに渡された値とすぐに比較してください。有効な場合は、直ちにキーの状態を削除または変更し、使用されていることを確認します。その後、適切なアプリケーションを表示します。

    • このJavaScriptメソッドは、それがビートすることはできますが(それはそうですが、ユーザーは、サーバーに送信される「リファラ」を変更することができます。)、サードパーティのユーザーのための最も苦痛な方法になります

ASP

あなたは、ユーザーがサーバー内で自分のURLにリクエストをするために得ることができる場合は、ユーザーへのライセンスのような任意の危険な情報をさらすことなくなります。 $key = file_get_contents("http://www.yoursite.com/preauth.asp?lic=1234");のようなものを呼び出すことができます。直前に生成した1回限りの使用キーでiframeを出力できる直後です。