Làm cách nào để biết rằng trang của tôi được nhúng làm khung cho trang khác trong quá trình tải trang? Tôi đoán tiêu đề yêu cầu của người giới thiệu không thể giúp tôi ở đây? Cảm ơn.
Làm cách nào để biết rằng trang của tôi được nhúng làm khung cho trang khác trong quá trình tải trang? Tôi đoán tiêu đề yêu cầu của người giới thiệu không thể giúp tôi ở đây? Cảm ơn.
Câu trả lời:
Bạn không thể kiểm tra nó từ phía máy chủ, nhưng bạn có thể sử dụng javascript để phát hiện nó sau khi trang tải xong. So sánh top
và self
, nếu chúng không giống nhau, bạn đang ở trong một khung.
Ngoài ra, một số trình duyệt hiện đại tôn trọng X-FRAME-OPTIONS
tiêu đề, có thể có hai giá trị:
Người dùng bao gồm Picasa của Google, không thể được nhúng vào khung.
Các trình duyệt hỗ trợ tiêu đề, với phiên bản tối thiểu:
Stackoverflow bao gồm một số JS để kiểm tra nó ( master.js
). Đây là phần liên quan của nó:
if(top!=self){
top.location.replace(document.location);
alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}
Nhưng hãy nhớ rằng JS có thể bị vô hiệu hóa.
Đối với các trình duyệt hiện đại , bạn có thể sử dụng CSP (Chính sách bảo mật nội dung), đây là một tiêu chuẩn. Tiêu đề sau sẽ ngăn tài liệu tải trong khung ở bất kỳ đâu:
Content-Security-Policy: frame-ancestors 'none'
(Tuy nhiên, IE 11 cần X-
tiền tố). Bạn cũng có thể thay đổi 'none'
nguồn gốc được phép đóng khung, chẳng hạn như trang web của riêng bạn.
Để bao gồm các trình duyệt cũ hơn, điều này tốt nhất được sử dụng cùng với câu trả lời của @ Maerlyn .
bạn có thể ngăn tải trang của mình trong iframe bằng javascript
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
mã này thay đổi địa chỉ vùng chứa iframe của trang thành địa chỉ trang của bạn và buộc vùng chứa hiển thị trang của bạn.
sandbox
thuộc tính trên iframe cho phép cấm các vụ hack thoát khung như vậy. Vì vậy, cách này không phải là một cách bảo mật để ngăn chặn việc đóng khung, trong trường hợp mối quan tâm của bạn là vấn đề bảo mật.
Hoặc bạn có thể chặn một miền cụ thể nếu bạn không bận tâm đến nội dung của mình ở một số vị trí nhưng không muốn nó trên một trang web nhất định. Ví dụ: nếu bạn offendingdomain.com
đang nhúng nội dung của mình, bạn có thể làm như sau:
<script type="text/javascript">
if(document.referrer.indexOf("offendingdomain.com") != -1) {
window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
}
</script>
Điều này sẽ kiểm tra vị trí của tài liệu gốc và xem liệu đó có phải là nơi offendingdomain.com
đang nhúng nội dung của bạn hay không. Tập lệnh này sau đó sẽ gửi iframe đó đến một video youtube nổi tiếng nhất định như một hình phạt. Trên thực tế, họ chỉ là Rick-Rolled mình.
Sử dụng javascript để kiểm tra xem nó có được tải trên iframe hay không bằng cách đặt tập lệnh sau vào cuối tệp php của bạn và chuyển hướng đến trang hiển thị cảnh báo hoặc thông báo rằng trang của bạn không được tải bằng iframe.
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>
<?php
header("Content-Security-Policy: frame-ancestors 'none'");
?>