web-dev-qa-db-fra.com

Boîte de dialogue "confirmation de navigation" malveillante?

Certains sites, comme StackExchange, affichent un "Êtes-vous sûr de vouloir quitter cette page?" dialogue lorsque vous essayez de partir dans certaines conditions, par exemple si vous avez un message que vous n’avez pas terminé de modifier. C'est utile!

Malheureusement, les sites malveillants ou infectés préfèrent utiliser la même fonctionnalité pour dire: "Hé! Vous n'avez pas installé notre malwareun antivirus pour traiter les 111 virus sur lesquels nous ne mentons absolument pas! ", et les options" Quitter cette page "et" Rester sur cette page "sont remplacées par le libellé" Soyez en sécurité. Installez notre produit "et" Tirez-vous dans le pied ". Cela n’aide en rien!

Javascript peut faire des choses désagréables. Quand un de ces dialogues tente de m'empêcher de quitter un site clairement malveillant, quelle devrait être ma réponse? Est-il prudent de cliquer sur "Quitter cette page" ou de remplacer le texte par quoi que ce soit? Un site peut-il modifier le comportement du bouton ou intercepter ma tentative de navigation et dessiner son propre faux dialogue faisant tout ce qu'un attaquant veut quand je clique dessus?

31
user2357112

Malgré ce que disent certains de ces dialogues, ils ne peuvent rien faire de malicieux . Vous pouvez toujours cliquer sur OK ou Quitter la page pour fermer la page incriminée sans aucune conséquence.

Si la boîte de dialogue est trop longue et que les boutons sont éteints , vous pouvez appuyer sur Enter pour confirmer la fermeture de la page.

Si vous ne possédez pas de clavier (appareils à écran tactile), utilisez le bookmarklet ci-dessous ou reportez-vous à la section Réponse de SimpleSimon (Chrome uniquement).


Maintenant, quelques détails.

Il n’ya qu’un moyen d’effectuer une action lors de la fermeture d’une page: via l’événement onbeforeunload . Bien sûr, cela pourrait être facilement utilisé contre l'utilisateur (par exemple, lorsqu'il tente de fermer une page, sa copie s'ouvre dans une nouvelle fenêtre), donc c'est très limité.

En fait, la seule chose raisonnable à faire est d'ouvrir une boîte de dialogue avec du texte personnalisé et deux boutons, l'un pour quitter la page et l'autre pour rester. La seule chose qu'une page puisse faire avec ce dialogue est de définir son texte. Les boutons et la barre de titre sont immuables. Voici une capture d'écran de Firefox 3.6: ( très ancienne version de Firefox)

Screenshot from Firefox 3.6

Bien sûr, lorsque vous laissez les gens afficher des fenêtres contextuelles avec un texte et juste des boutons OK/Annuler , alors vous pouvez être sûr que plus tôt ou plus tard, certains gars l'utiliseront contre vous.

Screenshot of a malicious windows from Firefox 3.6

Dans la capture d'écran ci-dessus OK signifie simplement "Quitter cette page", mais la description personnalisée suggère quelque chose de plus. Les navigateurs ont donc modifié les boîtes de dialogue, il est donc difficile de les rendre trompeuses. Par exemple, les versions récentes de Firefox semblent ignorer le texte personnalisé:

Screenshot from Firefox 23

Chrome affiche le texte personnalisé, mais ajoute toujours une question demandant à l'utilisateur ce qu'il veut faire et les boutons indiquent explicitement leurs actions: (mais cela reste sujet aux messages "cat videos"!)

Screenshot from Chrome 29

Voici Internet Explorer 10, également "sujet de chat":

Screenshot from IE 10

Opera 12 ignore simplement l'événement onbeforeunload et si vous essayez de fermer un onglet comme celui-ci, il se fermera comme un autre. Je n'ai cependant pas testé le dernier opéra.

Donc, pour résumer les choses les plus importantes:

  • Les pages ne peuvent afficher des dialogues avec aucun texte. Le site Web peut demander au navigateur d’afficher un dialogue avec un texte personnalisé, mais le navigateur peut l’ignorer complètement (Opera), utiliser un texte générique (Firefox) ou indiquer explicitement ce qui va se passer (Chrome, IE).
  • Les détails de la boîte de dialogue dépendent du navigateur que vous utilisez, mais les boutons sont toujours immuables. S'ils ne disent pas explicitement qui fait quoi, alors OK signifie "quitte cette page * et Annuler est" reste ici".
  • Les sites Web ne peuvent effectuer aucune action malveillante si vous décidez de les quitter. Vos fichiers ne seront pas remplacés par des vidéos de chat, vous ne serez pas inondés de virus 135234 et le FBI ne sera pas informé de la présence de logiciels illégaux sur votre ordinateur.

Vous pouvez désactiver l'événement onbeforeunload si vous le souhaitez, empêchant ainsi les pages de vous demander de quitter ou de rester. Voici un multi-navigateur serscript . (faites défiler vers le bas si le lien est mort)

Si vous êtes sur un site Web spécifique qui affiche une fenêtre contextuelle malveillante et que vous avez toujours peur de cliquer sur Laisser , vous pouvez créer un bookmarklet pour le supprimer. Cliquez avec le bouton droit de la souris sur la barre de favoris, choisissez un nouveau favori (ou son équivalent) et collez-le sous forme d'URL: (il s'agit simplement d'un code minifed du lien ci-dessus)

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

Ensuite, cliquez simplement sur ce signet et la fenêtre contextuelle sera temporairement supprimée de la page active.

Si vous souhaitez tester l'apparence de ces fenêtres contextuelles dans votre navigateur ou le bookmarklet/userscript, créez un fichier texte avec le code suivant et enregistrez-le sous un fichier .html:

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

Il semble que le lien avec le script d’utilisateur soit mort, c’est donc une copie extraite de archive.org cache . Tout crédit pour le créateur de script 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);
24
gronostaj

En fait, FireFox a une solution plutôt astucieuse (et facile). Si vous tapez

about:config

dans la barre d'adresse, puis faites défiler jusqu'à

dom.disable_beforeunload

et définissez sa valeur sur True, vous ne verrez plus les fenêtres contextuelles Quitter la page. Dans FireFox. Dommage qu'il n'y ait pas de solution similaire dans Chrome.

10
Reverend Jim

La solution la plus simple dans Chrome consiste à bloquer l’onglet.

Tapez chrome: // crash dans la barre d'adresse et enregistrez sous un signet .

La prochaine fois que vous voudrez quitter une telle page, cliquez simplement sur le signet pour supprimer instantanément cet onglet, sans affecter vos autres onglets. Pas besoin de tuer toute la session du navigateur comme l'ont suggéré d'autres.

Sinon, vous pouvez accrocher l'onglet en utilisant chrome: // hang, puis fermez-le simplement sans utiliser JavaScript.

Pas sûr que cela soit possible dans d'autres navigateurs.

7
SimpleSimon

Ceci est l'événement window.onbeforeunload et une fonctionnalité du navigateur Web. Donc, cela devrait être un dialogue fixe du navigateur Web. Vous pouvez essayer dans différents navigateurs et ainsi vous pouvez voir que les boîtes de dialogue sont dans différentes conceptions.

Mais je suppose que vous pourriez développer un popup avec javascript, qui ressemble beaucoup au très original du popup. Et s'il s'agit d'un bon développeur, il vérifiera également le type de navigateur avant d'afficher la boîte de dialogue. ;)

Vous devez donc vérifier en parallèle le bon dialogue, par exemple ici: http://samples.msdn.Microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload. htm

Voir ici pour plus d'informations sur l'événement:
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.Microsoft.com/en-us/library/ms536907%28VS.85%29.aspx

1
Chris

Solution de contournement rapide si vous ne faites pas confiance au "popup" et à ses intentions/actions:

Pour Chrome:

  • Échapper pour supprimer les pop-up

  • Clic droit sur la page

  • Sélectionnez inspecter

  • Faites défiler vers le haut

  • Clic droit sur la balise

  • Supprimer le nœud

  • Fermer l'onglet

Je suis sûr que les autres navigateurs ont des options similaires.

0
George 2.0 Hope