Làm cách nào tôi có thể phát hiện phía máy chủ (C#, asp.net mvc) nếu trang được tải nằm trong iframe? Cảm ơnPhát hiện xem trang có nằm trong iframe - serverside
Trả lời
Đ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.
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.
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.
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.
điều này sẽ là câu trả lời. –
no @RoyiNamir, đây không phải là giải pháp serverside;) – tetri
@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
- 1. Phát hiện xem đĩa có nằm trong ổ đĩa DVD
- 2. Phát video với jQuery nằm bên trong một iFrame
- 3. Phát hiện xem trang web có chuyển hướng javascript không
- 4. Cách phát hiện xem một trang web không thể được nhúng qua iframe?
- 5. Phát hiện chuyển hướng trong iFrame
- 6. Cách phát hiện xem trang HTML có chứa video không?
- 7. Có thể phát hiện xem VoiceOver có đang ở trên một trang web trên iPhone không?
- 8. Youtube iframe api bắt đầu phát hiện lỗi trong Firefox
- 9. Phát hiện phía máy chủ mà một trang được hiển thị bên trong một IFrame
- 10. Phát hiện xem nội dung iframe đã tải thành công chưa
- 11. Ẩn/hiện trong JavaScript - ngừng phát video iframe trên YouTube
- 12. Theo dõi Google Analytics serverside
- 13. Phát hiện xem trình duyệt có các phím mũi tên/bàn phím trong trang web không
- 14. Tự động hóa từ: Phát hiện xem ngắt trang có cần thiết không?
- 15. Phát hiện xem RichTextBox có trống không
- 16. Phát hiện xem tai nghe có micrô
- 17. HTML5 đến PDF serverside
- 18. Phát hiện xem HttpModule có được nạp
- 19. Javascript: kiểm tra xem trang IF có nằm ở đầu trang
- 20. Làm thế nào để phát hiện xem trang hiện tại có phải là trang chủ với CakePhp không?
- 21. Tôi làm cách nào để phát hiện liệu iframe có được tải không?
- 22. Phát hiện xem nhạc có đang phát không?
- 23. Phát hiện xem phần tử Video HTML5 có đang phát
- 24. Cách phát hiện xem Micrô có hiện diện không
- 25. Nhúng trang bên ngoài không có iframe?
- 26. Trang iframe của IE7
- 27. Phát hiện xem chuột có trên một phần tử khi tải trang bằng Javascript
- 28. Phát hiện thay đổi hướng từ trong iframe tên miền chéo
- 29. Smarty: kiểm tra xem biến có nằm trong mảng
- 30. Tìm xem thời gian hiện tại có nằm trong khoảng từ
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
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