2009-07-24 25 views

Trả lời

16

Điều này là không thể, tuy nhiên.

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

và sau đó kiểm tra serverside nếu chuỗi truy vấn chứa iframe = yes hoặc với tiêu đề Referer gửi bởi trình duyệt.

+2

cảm ơn, nhưng điều này không giải quyết được sự cố của tôi vì tôi muốn trang chỉ được truy cập nếu trong một khung nội tuyến (vì một số lý do bảo mật). việc thêm một thứ gì đó vào chuỗi truy vấn chỉ là quá dễ thực hiện để bảo mật. – pistacchio

+13

Nếu đó là vì lý do bảo mật, thì bạn đang làm sai điều gì đó. Tốt nhất, điều duy nhất có thể dẫn bạn vào trong iframe là một referer. Và thậm chí điều đó cũng có thể được tha thứ. Bảo mật được thực hiện bằng kiểm tra và xác thực truy cập, không phải do các giả định mong manh. – Yuliy

3

Không có cách nào để kiểm tra điều này phù hợp với yêu cầu của bạn về "an toàn" như đã nêu trong nhận xét của bạn về câu trả lời của @ WTP.

1

Tôi không nghĩ phía máy chủ có thể thực hiện việc này, vậy tại sao không đặt điều khiển ẩn trong trang của bạn sẽ nằm trong iframe? Khi URL trong khung nội tuyến tải, bạn có thể thêm một số mã phía máy khách để đặt đầu vào bị ẩn để cho biết bạn đang ở trong khung nội tuyến. Kiểm tra dễ dàng nhất sẽ ở phía máy khách trong phương thức tải, như sau:

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

Nó an toàn hơn chuỗi truy vấn, nhưng vẫn không đủ bảo mật cho bạn.

2 xu của tôi.

6

Sử dụng Bộ luật sau bên trong các hình thức:

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

Sau đó, bạn có thể kiểm tra dễ dàng nếu nó là một iFrame trong code-behind:

bool bIsInIFrame = (hfIsInIframe.Value == "true"); 

Tested và làm việc cho tôi.

Chỉnh sửa: Xin lưu ý rằng bạn yêu cầu jQuery chạy mã của tôi ở trên. Để chạy nó mà không jQuery chỉ cần sử dụng một số mã như sau (chưa được kiểm tra) mã để thiết lập giá trị của lĩnh vực ẩn:

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

Chỉnh sửa 2: Đây chỉ hoạt động khi trang đã được nạp một lần. Nếu ai đó có ý tưởng để cải thiện điều này, hãy cho tôi biết. Trong trường hợp của tôi, tôi may mắn chỉ cần giá trị sau khi postback.

+1

điều này sẽ là câu trả lời. –

+2

no @RoyiNamir, đây không phải là giải pháp serverside;) – tetri

+1

@tetri, với mã này u có thể kiểm tra từ serverside nếu bạn đang ở trong iframe. Tôi đồng ý, rằng có một số mã máy khách - nhưng theo ý kiến ​​của tôi, đó là giải pháp tốt nhất vì nó không quan tâm đến cách trang được gọi. Câu trả lời được chấp nhận hiện tại yêu cầu giá trị yêu cầu được đặt trong mọi iframe - và điều này có thể bị lãng quên. – Undercover1989

Các vấn đề liên quan