Diálogos de "confirmación de navegación" maliciosos?

32

Algunos sitios, como StackExchange, muestran un mensaje emergente como "¿Está seguro de que desea abandonar esta página?" cuadro de diálogo cuando intenta salir bajo ciertas condiciones, como si tiene una publicación que no ha terminado de editar. ¡Esto es útil!

Desafortunadamente, a los sitios maliciosos o infectados les gusta usar la misma funcionalidad para decir: "¡Oye! ¡No has instalado nuestro antivirus de malware para abordar los 111 virus que definitivamente no estamos mintiendo sobre encontrar en tu computadora!", Y el "Deje esto Las opciones de página "y" Permanecer en esta página "se reemplazan por algo como" Esté seguro. Instale nuestro producto "y" Dispárese en el pie ". Esto no es útil!

Javascript puede hacer algunas cosas desagradables. Cuando recibo uno de esos diálogos tratando de evitar que salga de un sitio claramente malicioso, ¿cuál debería ser mi respuesta? ¿Es seguro hacer clic en "Abandonar esta página" o en lo que sea que reemplazaron el texto? ¿Podría un sitio cambiar el comportamiento del botón o interceptar mi intento de navegar y dibujar su propio diálogo falso que hace lo que un atacante quiere cuando hago clic en él?

user2357112 es compatible con Monica
fuente
1
Acabo de matar todo el proceso del navegador desde el explorador de procesos o su equivalente. Mucho más seguro, ya que no sabes que el botón realmente dice.
Journeyman Geek

Respuestas:

24

A pesar de lo que dicen algunos de estos diálogos, no pueden hacer nada malicioso . Siempre puede hacer clic en Aceptar o Salir de la página para cerrar la página ofensiva sin ninguna consecuencia.

Si el cuadro de diálogo es demasiado largo y los botones están fuera de la pantalla , puede presionarEnter para confirmar el cierre de la página.

Si no tiene un teclado (dispositivos de pantalla táctil), use el bookmarklet a continuación o vea la respuesta de SimpleSimon (solo Chrome).


Ahora, algunos detalles.

Solo hay una forma de realizar alguna acción cuando se cierra una página: a través del onbeforeunloadevento. Por supuesto, esto podría usarse fácilmente contra el usuario (por ejemplo, cuando intenta cerrar una página, abre su copia en una nueva ventana), por lo que es muy limitada.

En realidad, lo único razonable que puede hacer es abrir un cuadro de diálogo con texto personalizado y dos botones, uno para salir de la página y otro para quedarse. Lo único que puede hacer una página con ese diálogo es definir su texto. Los botones y la barra de título son inmutables. Aquí hay una captura de pantalla de Firefox 3.6: ( versión muy antigua de Firefox)

Captura de pantalla de Firefox 3.6

Por supuesto, cuando dejas que las personas muestren ventanas emergentes con cualquier texto y solo botones OK / Cancelar , puedes estar seguro de que tarde o temprano algunos chicos lo usarán en tu contra.

Captura de pantalla de una ventana maliciosa de Firefox 3.6

En la captura de pantalla anterior, OK significa simplemente "Abandonar esta página", pero la descripción personalizada sugiere algo más. Por lo tanto, los navegadores han cambiado los cuadros de diálogo, por lo que es más difícil hacerlos engañosos. Por ejemplo, las versiones recientes de Firefox parecen ignorar el texto personalizado:

Captura de pantalla de Firefox 23

Chrome muestra el texto personalizado, pero siempre agrega una pregunta preguntando al usuario qué quiere hacer y los botones indican explícitamente sus acciones: (¡pero sigue siendo propenso a los mensajes de "videos de gatos"!)

Captura de pantalla de Chrome 29

Aquí está Internet Explorer 10, también "propenso a los gatos":

Captura de pantalla de IE 10

Opera 12 simplemente ignora el onbeforeunloadevento y si intentas cerrar una pestaña como esa, se cerrará como cualquier otra. Sin embargo, no he probado la última Opera.

Entonces, para resumir las cosas más importantes:

  • Las páginas no pueden mostrar cuadros de diálogo con ningún texto. El sitio web puede pedirle al navegador que muestre un diálogo con un texto personalizado, pero el navegador puede ignorarlo por completo (Opera), usar texto genérico (Firefox) o decir explícitamente qué sucederá (Chrome, IE).
  • Los detalles del cuadro de diálogo dependen del navegador que esté utilizando, pero los botones siempre son inmutables. Si no dicen explícitamente cuál hace qué, entonces OK significa "salir de esta página * y Cancelar es" quedarse aquí ".
  • Los sitios web no pueden realizar ninguna acción maliciosa si decides abandonarlos. Sus archivos no serán reemplazados por videos de gatos, no se inundará con los virus 135234 y el FBI no será informado de que tiene un software ilegal en su computadora.

Puede deshabilitar el onbeforeunloadevento si lo desea, evitando efectivamente que las páginas le pidan que se vaya o se quede. Aquí hay un script de usuario cruzado . (desplácese hacia abajo si el enlace está muerto)

Si está en un sitio web específico que muestra una ventana emergente maliciosa y todavía tiene miedo de hacer clic en Dejar , puede crear un marcador para eliminarlo. Haga clic con el botón derecho en la barra de marcadores, elija Nuevo marcador (o equivalente) y péguelo como URL: (es solo un código minifundido del enlace de arriba)

javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);

Luego, simplemente haga clic en ese marcador y la ventana emergente se eliminará temporalmente de la página activa.

Si desea probar cómo se ven esas ventanas emergentes en su navegador o probar el bookmarklet / userscript, cree un archivo de texto con el siguiente código y guárdelo como un .htmlarchivo:

<html><body onbeforeunload="return 'My custom text.'">_</body></html>

Parece que el enlace del script de usuario está muerto en este momento, así que aquí hay una copia extraída de la caché archive.org . Todo el crédito para el creador del guión original.

// ==UserScript==
// @name           Disable - remove onbeforeunload
// @namespace      
// @description    Disable - remove the annoying onbeforeunload event
// @include        *
// @author         netvisiteurs.com
// ==/UserScript==

var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);
gronostaj
fuente
2
Presionaría "OK" en ese segundo. Después de todo, ¿quién no quiere más videos de gatos?
Daniel R Hicks
Ooh, Javascript para deshabilitar el diálogo. ¡Agradable!
user2357112 es compatible con Monica el
Lamentablemente, ese script de usuario no funciona de manera confiable en algunas páginas web. El cuadro de diálogo aún se muestra a pesar de que window.onbeforeunload y window.onunload son nulos. No sé cómo se las arreglan para hacer eso, supongo que el controlador se sobrescribe en algún momento y luego vuelve a ser nulo, tal vez en algún evento onclick.
Atan
10

En realidad, FireFox tiene una solución bastante ingeniosa (y fácil). Si escribes

about:config

en la barra de direcciones, luego desplácese hacia abajo para

dom.disable_beforeunload

y establezca su valor en Verdadero, ya no verá las ventanas emergentes Salir de la página. En Firefox. Lástima que no haya una solución similar en Chrome.

Reverendo jim
fuente
7

La solución más simple en Chrome es bloquear la pestaña.

Escribe chrome: // crash en la barra de direcciones y guárdalo como marcador .

La próxima vez que desee abandonar dicha página, simplemente haga clic en el marcador y eliminará esa pestaña al instante, sin afectar sus otras pestañas. No es necesario eliminar toda la sesión del navegador, como han sugerido otros.

Alternativamente, puede colgar la pestaña usando chrome: // colgar y luego simplemente cerrar la pestaña sin ejecutar JavaScript.

No estoy seguro si esto es posible en otros navegadores.

SimpleSimon
fuente
Las versiones más recientes de estas páginas arrojarán otra ventana emergente sobre cualquier acción del usuario, como hacer clic con el mouse o presionar una tecla, por lo que ya no puede chrome: // crash
rsaxvc
1

Este es el evento window.onbeforeunload y una característica del navegador web. Entonces, este debería ser un diálogo fijo del navegador web. Puede probar en diferentes navegadores y para que pueda ver, los cuadros de diálogo están en diferentes diseños.

Pero supongo que podría desarrollar una ventana emergente con javascript, que se parece mucho a la ventana emergente original del navegador. Y si es un buen desarrollador, también comprobaría el tipo de navegador antes de mostrar el diálogo. ;)

Entonces, para estar muy seguro acerca de un diálogo original, debe verificar en paralelo el diálogo correcto, es decir, aquí: http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm

Consulte aquí para obtener más información sobre el evento:
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.microsoft.com/en-us/library/ms536907% 28VS.85% 29.aspx

Chris
fuente
0

Solución rápida si no confía en la "ventana emergente" y sus intenciones / acciones:

Para Chrome:

  • Escapar para eliminar la ventana emergente

  • Haga clic derecho en la página

  • Seleccionar inspeccionar

  • Desplazarse hacia arriba

  • Haga clic derecho en la etiqueta

  • Eliminar nodo

  • Cerrar pestaña

Estoy seguro de que los otros navegadores tienen opciones similares.

George 2.0 Hope
fuente
3
Solución más rápida