2009-07-24 52 views

回答

16

但是,這是不可能的。

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

,然後檢查服務器端,如果查詢字符串中包含的iframe =是 或與Referer標頭由瀏覽器發送。

+2

謝謝,但這並不能解決我的問題,因爲我希望只有在iframe內出於某種安全原因才能訪問頁面。在查詢字符串中添加一些內容很容易做到安全。 – pistacchio 2009-07-24 18:31:38

+13

如果出於安全原因,那麼你做錯了什麼。充其量,唯一可能提示你在iframe中的東西是引用者。即使這是可僞造的。安全性是通過訪問檢查和驗證完成的,而不是通過脆弱的假設網絡完成的。 – Yuliy 2009-07-24 18:35:38

3

如果您對@ WTP的回答發表評論,則無法檢查該內容是否符合您的「安全」要求。

1

我不認爲服務器端可以做到這一點,那麼爲什麼不把隱藏的控件放在你的頁面中將在iframe中?當iframe中的URL加載時,可以添加一些客戶端代碼來設置隱藏的輸入以指示您在iframe中。最簡單的檢查將是對客戶端在一個onload方法,像這樣:

// 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來運行我上面的代碼。要運行它,而不只是jQuery的使用一些類似於下面的代碼(未經測試)代碼設置的隱藏字段的值:當頁面加載一次,這僅適用於:

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

編輯2。如果有人有想法來改善這一點,讓我知道。在我的情況下,我很幸運只需要回傳後的值。

相關問題