Giả sử bạn không muốn các trang web khác "đóng khung" trang web của mình trong <iframe>
:
<iframe src="http://example.org"></iframe>
Vì vậy, bạn chèn JavaScript chống khung, đóng khung JavaScript vào tất cả các trang của bạn:
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
Thông minh! Bây giờ bạn tự động "bán thân" hoặc thoát ra khỏi bất kỳ iframe nào. Ngoại trừ một vấn đề nhỏ.
Khi nó bật ra, mã phá vỡ khung của bạn có thể bị phá vỡ , như được hiển thị ở đây :
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://example.org/page-which-responds-with-204'
}
}, 1)
</script>
Mã này thực hiện như sau:
- tăng bộ đếm mỗi khi trình duyệt cố gắng điều hướng khỏi trang hiện tại, thông qua
window.onbeforeunload
trình xử lý sự kiện - thiết lập bộ hẹn giờ kích hoạt mỗi mili giây thông qua
setInterval()
và nếu nó thấy bộ đếm tăng lên, hãy thay đổi vị trí hiện tại thành máy chủ điều khiển của kẻ tấn công - máy chủ đó phục vụ một trang có mã trạng thái HTTP 204 , điều này không khiến trình duyệt điều hướng ở bất cứ đâu
Câu hỏi của tôi là - và đây là một câu đố JavaScript hơn là một vấn đề thực tế - làm thế nào bạn có thể đánh bại buster phá khung?
Tôi đã có một vài suy nghĩ, nhưng không có gì làm việc trong thử nghiệm của tôi:
- cố gắng để xóa
onbeforeunload
sự kiện thông quaonbeforeunload = null
không có hiệu lực - việc thêm một
alert()
quá trình đã dừng cho phép người dùng biết nó đang xảy ra, nhưng không can thiệp vào mã theo bất kỳ cách nào; nhấp vào OK cho phép tiếp tục nhộn nhịp như bình thường - Tôi không thể nghĩ ra cách nào để xóa
setInterval()
bộ đếm thời gian
Tôi không phải là một lập trình viên JavaScript, vì vậy đây là thách thức của tôi với bạn: hey buster, bạn có thể phá vỡ buster nhộn nhịp khung hình không?
example.org
được chỉ định trong RFC 2606 ietf.org/rfc/rfc2606.txt