2010-04-23 12 views
6

Bir test ekibinin parçasıyım ve bir Firefox tarayıcısında JavaScript'i kullanarak "kötü davranmak" görevinde bulundum. Tarayıcıyı indirmek için these methods'u denedim, ancak bunların hiçbiri betiğin kapatılmasını isteyen bir açılır pencereye neden olmaktan daha kötü bir şey yapmıyor.JavaScript kullanarak Crash firefox

Başka bir fikrin var mı?

+18

Sesler: Beni leet zero-dayz için segfaults bulun! –

cevap

9

bir "çatal bomba"

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

için Biraz benzeyen Aşağıda FF 3.6 ve tarafından Stoppable değildir. Ne kadar uzun süre koşarsanız o kadar kısır olur. Sonunda, işlem için mevcut olan tüm belleği tüketir. CPU üzerindeki yük de artar. Bazı işletim sistemleri, yanlış davranış gösteren bir FF ile diğerlerinden daha iyi başa çıkabilir. Her döngüde DOM'a uygun bir yük uygularsanız bunu daha da bozulabilir hale getirebilirsiniz.

Düzenleme: "Bu bilgiyi yalnızca dünyanın iyiliği için kullanın." :-)

+1

Firefox 13'ü çalıştırıyorum ve hala buna karşı bağışık değil. Birkaç dakika sonra, Firefox bana "Üzgünüz" kutusunu veriyor. – bwDraco

+2

Ugh, bu bir güvenlik açığı.Firefox'un 32-bit sürümlerinde, bu birkaç dakika sonra Firefox'u indirecek kolay bir DoS saldırısıdır. Bu, 64 bit Firefox'ta daha da kötüdür (x86-64 Linux'ta olduğu gibi): tarayıcı, OOM katil algılayıcının algılamasına kadar makinenin kilitlenmesini veya makinenin donma ihtimaline karşı makinenin kilitlenmesini engelleyebilir. benzer işlevselliğe sahip, bilgisayarı tamamen çökertir. Bu gerçekten yamalı. – bwDraco

+0

@DragonLord Ne yazık, gerçekten. İşleyicilerin sayısında bazı iç aklı kısıtlamaları beklerdim. Diğer tarayıcıların nasıl olduğunu merak ediyorum. Ancak, ben * hiç * bunu yapan bir siteye gittiysem, asla geri dönmem;) –

6

Komut yürütme zamanı watchdog güzel ve tüm, ancak modal döngü sorunu çözmez. Bir alert, confirm veya prompt kutusuna gitmek bu hale zamanlayıcı durur:

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

kaçmak için zor ve bu: etkin bir imkansız

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

. (Görev Yöneticinize yardımcı olun.)

Kaçmak için zor olan modal döngüler kullanmak, saldırgan casus yazılım yükleyici sayfalarının favori taktiğiydi. (“Artık VomitBar'ı yüklemek için Evet'i tıklatın veya sonsuz uyarı kutuları ile yüzleşin ...”)

+3

Chrome> Bu Firefox'ta :); http://tinypic.com/r/54smer/5 – Matt

+1

En sinir bozucu şeylerden biri ... hiç! –

+2

Chrome, ilk kutudan sonra komut dosyasını sonlandırma seçeneğini sunar. –

2

Firefox'umu yaklaşık 10,000+ öğeden oluşan büyük bir DOM yerleştirmesi yaparak tekrar tekrar çökmeyi başarabiliyorum. Temel olarak, kullanıcı jQuery AJAX çağrısını tetiklemek için bir düğmeyi tıklatır. Arama, jQuery ile belirli bir div'a eklenecek tam bir HTML dosyasını döndürür.

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

Sonra veri eklenmiştir kez olayları ağacında temelde her eleman için verilerin ilgili tüm muck ayrıştırmak ve onClick ekleyip onHover kalkışabilir.

Bu işlevi çalıştırdığım her seferde tarayıcımın çökmesine izin ver. Her zamanki gibi "bir betik yavaşça çalışırsa onu iptal etmek istersiniz" getirecektir, ama asla iptal edemedim ve her zaman CTRL + ALT + DEL'a vardı.

Sadece FYI, 10,000 eleman ekleme yapmayı hiç planlamamıştım. JOIN ile bir veritabanını sorguluyordum ve SELECT DISTINCT'i yapmak istemiştim ve bunun yerine 100 elementi geri çevirmek yerine SELECT yapmıştım. Whoops. (Kullanıcı yakında ihlal sekmeyi kapatmak olur sürece)