2010-04-23 45 views
6

Tôi là thành viên của nhóm thử nghiệm và đã được giao nhiệm vụ "cư xử xấu" bằng JavaScript trong trình duyệt Firefox. Tôi đã thử these methods để gỡ xuống trình duyệt, nhưng không ai trong số họ làm bất cứ điều gì tồi tệ hơn gây ra một popup yêu cầu tắt kịch bản.Crash firefox bằng cách sử dụng JavaScript

Bất kỳ ý tưởng nào khác?

+18

Âm thanh như: Tìm tôi segfaults cho leet zero-dayz! –

Trả lời

9

Hơi giống như một "quả bom ngã ba"

<html> 
<body> 
<a href="#" onclick="die()">click me!</a> 
<script> 
function die() { 
    setTimeout(function() {die(); die()}, 0) 
} 
</script> 
</body> 
</html> 

Nó không phải là stop bởi FF 3.6 và dưới đây (trừ khi người dùng sẽ xảy ra để đóng tab vi phạm sớm đủ). Các bạn còn để cho nó chạy luẩn quẩn hơn nó sẽ nhận được. Cuối cùng nó sẽ ăn hết tất cả bộ nhớ có sẵn cho quá trình này. Tải trên CPU cũng sẽ tăng lên. Một số hệ điều hành sẽ đối phó với FF hoạt động sai hơn những người khác. Bạn có thể làm cho điều này trở nên thoái hóa hơn nếu bạn cũng áp dụng một tải thích hợp cho DOM mỗi chu kỳ.

Chỉnh sửa: "Chỉ sử dụng kiến ​​thức này cho những điều tốt đẹp của thế giới". :-)

+1

Tôi đang chạy Firefox 13 và vẫn không miễn nhiễm với điều này. Vài phút sau, Firefox cho tôi hộp "Chúng tôi xin lỗi". – bwDraco

+2

Ugh, lỗ hổng là gì.Trên các phiên bản Firefox 32 bit, đây là một cuộc tấn công DoS dễ dàng sẽ gỡ xuống Firefox sau vài phút. Điều này thậm chí còn tồi tệ hơn trên Firefox 64-bit (như trên x86-64 Linux): trình duyệt có thể cấp phát một lượng bộ nhớ thực tế không giới hạn, có khả năng khóa máy do hoán đổi cho đến khi kẻ giết người OOM phát hiện nó hoặc trên hệ thống không có chức năng tương tự, làm hỏng máy tính hoàn toàn. Điều này thực sự cần phải được vá. – bwDraco

+0

@DragonLord Thật là một sự xấu hổ, thực sự. Tôi mong đợi một số giới hạn san bằng nội bộ cho số lượng người xử lý .. Tôi tự hỏi làm thế nào các trình duyệt khác công bằng. Tuy nhiên, nếu tôi * đã từng * đến một trang web đã làm điều đó, tôi sẽ không bao giờ quay trở lại;) –

6

Cơ quan giám sát thời gian thực thi tập lệnh đẹp và tất cả, nhưng nó không giải quyết được vấn đề về phương thức vòng lặp. Đi một hộp alert, confirm hoặc prompt dừng bộ đếm thời gian, làm cho này:

<script>while(true) alert('alert bomb');</script> 

khó khăn để thoát khỏi, và điều này:

<body onbeforeunload="while(true) alert('alert bomb');"> 

hiệu quả không thể. (Để Task Manager của bạn tiện dụng.)

Sử dụng các vòng phương thức khó thoát là một chiến thuật yêu thích của các trang cài đặt phần mềm gián điệp tích cực. (“Nhấp vào Có để cài đặt VomitBar ngay bây giờ hoặc đối mặt với các hộp cảnh báo vô tận ...”)

+3

Chrome> Firefox trên trang này :); http://tinypic.com/r/54smer/5 – Matt

+1

Một trong những điều khó chịu nhất ... bao giờ hết! –

+2

Chrome cung cấp tùy chọn chấm dứt tập lệnh sau hộp đầu tiên. –

2

Tôi đã cố gắng phá vỡ Firefox liên tục, bằng cách chèn DOM lớn khoảng 10.000+ yếu tố.

Về cơ bản, người dùng nhấp vào nút để kích hoạt cuộc gọi jQuery AJAX. Cuộc gọi sẽ trả về một tệp HTML đầy đủ, nó sẽ được thêm vào một div cụ thể với jQuery.

<script> 
    $("div.content").empty(); 
    $("div.content").html(data); 
</script> 

Sau đó, khi dữ liệu được thêm vào, nó sẽ phân tích toàn bộ dữ liệu đó và thêm vào các thành phần cơ bản trên cây.

Hãy yên tâm, mỗi khi tôi chạy chức năng này, trình duyệt của tôi đã bị lỗi. Nó sẽ mang đến bình thường "một kịch bản đang chạy chậm bạn có muốn hủy bỏ nó", nhưng tôi không bao giờ có thể hủy bỏ nó, và luôn luôn phải CTRL + ALT + DEL nó.

Chỉ cần thông tin, tôi chưa bao giờ lên kế hoạch thực hiện chèn 10.000 phần tử đó là lỗi của tôi. Tôi đã truy vấn một cơ sở dữ liệu với một JOIN và có nghĩa là để làm SELECT DISTINCT, và thay vào đó đã SELECT vì vậy thay vì trả về 100 phần tử, tôi đã trả lại 10.000 do các phép nối. Rất tiếc.

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