2009-07-24 3 views

答えて

16

これはできません。その後、

<iframe src="mypage?iframe=yes"></iframe> 

とクエリ文字列は、IFRAME = yesの またはブラウザでお送りRefererヘッダとが含まれている場合、サーバー側を確認してください。

+2

ありがとうございますが、iframe内でのみセキュリティ上の理由からページがアクセスされるようにしたいので、これは私の問題を解決しません。 querystringに何かを追加することは、安全のためにやるのが非常に簡単です。 – pistacchio

+13

セキュリティ上の理由から、何か間違ったことをしています。せいぜい、iframe内にいることを手がかりにする唯一のことは、リファラーです。それは偽造品です。セキュリティは、アクセスチェックと検証によって行われ、脆弱な仮定のWebではありません。 – Yuliy

3

あなたは@ WTPの答えに対するあなたのコメントに記載されているように、 "安全"というあなたの要求に合うようにこれをチェックする方法はありません。

1

私はサーバー側でこれを行うことはできないと思うので、iframeに表示されるページに隠れたコントロールを入れないでください。 iframe内のURLが読み込まれると、クライアント側のコードを追加して非表示の入力を設定し、iframe内にあることを示すことができます。

// Set hidden input 
someHiddenInput.value = self != top 

それは、クエリ文字列よりも安全だが、それはまだあなたのために十分なセキュリティではないかもしれません:最も簡単なチェックはこのように、オンロード法では、クライアント側になります。

私の2セント。

6

は、フォーム内の次のコードを使用します。

<asp:HiddenField ID="hfIsInIframe" runat="server" /> 
<script type="text/javascript"> 
    var isInIFrame = (self != top); 
    $('#<%= hfIsInIframe.ClientID %>').val(isInIFrame); 
</script> 

を、それがコードビハインドでiFrameのだならば、あなたは簡単に確認できます。

テスト済み
bool bIsInIFrame = (hfIsInIframe.Value == "true"); 

と私のために働きました。

編集:上記のコードを実行するにはjQueryが必要です。

document.getElementById('<%= hfIsInIframe.ClientID %>').value = isInIFrame; 

編集2:これだけ作品を、ページが一度ロードされたときにjQueryだけで隠しフィールドの値を設定するには、次の(未テスト)コードのようないくつかのコードを使用せずに、それを実行します。誰かがこれを改善するアイデアを持っているなら、私に知らせてください。私の場合は、幸いなことに、ポストバック後に値が必要なだけです。

+1

これが答えになるはずです。 –

+2

@RoyiNamir、これはサーバーサイドのソリューションではありません;) – tetri

+1

@tetri、このコードではiframeにあるかどうかをサーバ側から確認できます。クライアントコードがあることに同意します。しかし、私の意見では、ページがどのように呼び出されるかを気にしないので、最良の解決策です。現在受け入れられている回答では、iframeごとにリクエスト値を設定する必要があります。これは忘れられる可能性があります。 – Undercover1989

関連する問題