2010-04-23 14 views
6

Formo parte de un equipo de prueba y me han encomendado la tarea de "comportarse mal" al usar JavaScript en un navegador Firefox. He intentado llamar al these methods para bajar el navegador, pero ninguno hace nada peor que provocar una ventana emergente que solicita cerrar el script.Crash firefox usando JavaScript

¿Alguna otra idea?

+18

Suena como: ¡Encuéntrame segfaults para leet zero-dayz! –

Respuesta

9

algo parecido a una "bomba de tenedor"

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

No es imparable por FF 3.6 y por debajo (a menos que el usuario pasa a cerrar la pestaña que viola muy pronto). Cuanto más tiempo lo dejes correr más vicioso será. Eventualmente se comerá toda la memoria disponible para el proceso. La carga en la CPU también debería aumentar. Algunos sistemas operativos lidiarán mejor con un FF que se comporta mal que otros. Puede hacer esto más degenerado si también aplica una carga apropiada al DOM en cada ciclo.

Editar: "Utilice este conocimiento solo para el bien del mundo". :-)

+1

Estoy ejecutando Firefox 13 y aún así no es inmune a esto. Varios minutos después, Firefox me da el cuadro "Lo sentimos". – bwDraco

+2

Ugh, qué vulnerabilidad.En versiones de 32 bits de Firefox, este es un ataque DoS fácil que derribará Firefox después de varios minutos. Esto es aún peor en Firefox de 64 bits (como en x86-64 Linux): el navegador podría asignar una cantidad prácticamente ilimitada de memoria, bloqueando potencialmente la máquina debido al intercambio hasta que el asesino OOM la detecte, o en los sistemas que usan No tienen una funcionalidad similar, bloquean la computadora por completo. Esto realmente necesita ser parchado. – bwDraco

+0

@DragonLord Qué lástima, de verdad. Esperaría algunos límites de cordura internos al número de controladores. Me pregunto cómo otros navegadores son justos. Sin embargo, si * alguna vez * fui a un sitio que lo hizo, nunca volvería;) –

6

El script-execution-time-watchdog es bueno y todo, pero no resuelve el problema del lazo modal. El ir a una caja alert, confirm o prompt detiene el temporizador, haciendo esto:

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

difícil escapar, y esto:

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

efectivamente imposible. (Tenga a mano su Administrador de tareas.)

El uso de bucles modales difíciles de escapar fue una táctica favorita de las páginas agresivas del instalador de spyware. ("Haga clic en Sí para instalar VomitBar ahora o enfrente de cuadros de alerta interminables ...")

+3

Chrome> Firefox en este :); http://tinypic.com/r/54smer/5 – Matt

+1

¡Una de las cosas más molestas ... alguna vez! –

+2

Chrome ofrece la opción de finalizar el script después del primer cuadro. –

2

Logré bloquear mi Firefox repetidamente, haciendo una inserción DOM masiva de aproximadamente 10,000+ elementos.

Básicamente, el usuario hace clic en un botón para activar una llamada jQuery AJAX. La llamada devolvería un archivo HTML completo, que se anexaría a un div específico con jQuery.

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

Entonces una vez que se añadió los datos que trataría de analizar toda esa porquería de datos y onClick y onHover eventos a básicamente todos los elementos en el árbol.

Tenga la seguridad, cada vez que ejecuté esta función, mi navegador se bloqueó. Aparecería el habitual "un script se ejecuta lentamente, ¿quieres cancelarlo?", Pero nunca pude cancelarlo, y siempre tuve que presionar CTRL + ALT + DEL.

Solo para FYI, nunca planeé hacer una inserción de 10.000 elementos, fue un error de mi parte. Estaba consultando una base de datos con un JOIN y tenía la intención de hacer SELECT DISTINCT, y en su lugar SELECCIONé así que en lugar de devolver 100 elementos, devolví 10,000 debido a las uniones. Whoops.