10

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

私のiframeはで利用可能ですwww.mywebsite.con/iframe.aspx?lic=1234

iframeをホストしているサードパーティのウェブサイトが(PayedWebsited1.conOR PayedWebsited2.con)であり、lic=1234オプションも存在する場合は、iframeを表示します。他の詐欺師については、バナナを展示してください!

どうすればいいですか?

4

6 に答える 6

4

問題は、そのライセンス番号は、サーバー側のソリューションを使用するか、JavaScript を使用するかに関係なく、何の役にも立たないということです。詐欺師は 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をご覧ください。

新しいブラウザーでは、特別なヘッダーを送信できます。

X-Frame-Options: DENY

サーバー側でのみ、ロジックは同じままです。リファラーを確認してください。PayedDomain または独自のドメインの場合は、そのまま続行してください。それ以外の場合は、このヘッダーを送信します。

于 2012-05-31T17:57:06.187 に答える
3

サード パーティのユーザーが JavaScript ファイルを含めることができる場合、または理想的にはページを描画する前に ASP で要求を送信することが可能である場合は、次のようにします。

Javascript

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

    <?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.";
    }
    
  2. 次のような方法で、お客様に iframe の代わりにこの JavaScript コードを含めてもらいます。

    <script src="http://www.yoursite.com/preauth.php?lic=1234"></script>
    <script>drawIframe();</script>
    <div id="iframe_target"></div>
    
  3. iframe によって読み込まれるページで、iframe に渡された値に対して生成したキーをすぐに確認します。有効な場合は、キーが使用されていることがわかるように、すぐにキーのステータスを削除または変更します。次に、適切なアプリケーションを表示します。

    • この JavaScript メソッドは、サード パーティのユーザーにとって最も負担の少ない方法ですが、それよりも優れている可能性があります (ユーザーはサーバーに送信される「リファラー」を変更する可能性がありますが、可能性は低いです)。

ASP

ユーザーにサーバー内の URL へのリクエストを送信してもらうことができれば、ライセンスなどの危険な情報をユーザーに公開する必要がなくなります。$key = file_get_contents("http://www.yoursite.com/preauth.asp?lic=1234");生成したワンタイム ユース キーを使用して iframe を出力できる直後に、次のようなものを呼び出すことができます。

于 2012-06-03T04:34:08.010 に答える
0

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


彼らのアプリとあなたのアプリの間で何らかのハンドシェイクが必要であり、それはサーバー側で行う必要があります。

すべてのPayedWebsiteにはパスワードが必要です (または、静的 IP がある場合はそれを使用できます)。サーバーの内部で (CURL を使用している可能性があります)、パスワードを POST 経由で送信する必要があります。次に、iframe で使用されるトークンを返します。

iframe.aspx?lic=1234&token=d16evg5tr44e0trty45xp6es5

また、トークンは一度しか機能しません。そのため、iframe を開く必要があるたびにこのプロセスを繰り返す必要があります。そして、有効なトークンを含まないすべての接続を拒否します。

于 2012-05-31T15:42:50.890 に答える
0

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

参照ヘッダーに関する別の質問を参照することをお勧めします: aspx .net で http ヘッダー リファラーを検証する方法

基本的に、次のことを行います

  1. 紹介ヘッダーを使用してドメイン名を取得する
  2. データベースでドメイン名を検索します (そのサイトのライセンスがあったかどうかを確認するため)。
  3. 試合の結果に応じて、実際のページまたはバナナを送信します。
于 2012-05-31T23:13:28.523 に答える
0

セキュリティ上の理由から、お使いのブラウザでは、javascript を使用して親ページ (つまり、ページを表示する iframe を含むページ) の URL を検出することはできません。

私が考えることができる唯一の解決策は次のとおりです。

  1. iframe.aspx ページのユーザーに、使用しているドメインを示す追加の GET パラメータを含めるように主張します。
  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.
    }
} 
于 2012-05-29T09:05:16.103 に答える
-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

ありがとうございます!

于 2012-09-18T16:44:30.767 に答える