Schädliche Dialoge zum Bestätigen der Navigation?

32

Einige Websites, wie StackExchange, zeigen die Meldung "Möchten Sie diese Seite wirklich verlassen?" Dialogfeld, wenn Sie versuchen, unter bestimmten Bedingungen zu beenden, z. B. wenn Sie einen Beitrag haben, dessen Bearbeitung noch nicht abgeschlossen ist. Das ist hilfreich!

Unglücklicherweise verwenden böswillige oder infizierte Websites dieselbe Funktion, um zu sagen: "Hey! Sie haben unser Malware- Antivirus nicht installiert , um die 111 Viren zu beseitigen, die wir definitiv nicht auf Ihrem Computer finden wollen!" Die Optionen "Auf dieser Seite bleiben" und "Auf dieser Seite bleiben" werden durch die Optionen "Seien Sie sicher. Installieren Sie unser Produkt" und "Erschießen Sie sich selbst" ersetzt. Das ist nicht hilfreich!

Javascript kann einige böse Sachen machen. Wie soll ich reagieren, wenn ich in einem dieser Dialoge versuche, eine eindeutig böswillige Website nicht zu verlassen? Ist es sicher, auf "Diese Seite verlassen" zu klicken oder durch was auch immer sie den Text ersetzt haben? Könnte eine Site das Verhalten der Schaltfläche ändern oder meinen Versuch abfangen, weg zu navigieren und einen eigenen gefälschten Dialog zu zeichnen, der macht, was ein Angreifer will, wenn ich darauf klicke?

user2357112 unterstützt Monica
quelle
1
Ich würde einfach den gesamten Browserprozess vom Prozess-Explorer oder seinem Äquivalenten beenden. Viel sicherer, da Sie nicht wissen, dass der Knopf tatsächlich sagt.
Geselle Geek

Antworten:

24

Trotz der Aussage einiger dieser Dialoge können sie nichts Bösartiges tun . Sie können jederzeit auf OK oder Seite verlassen klicken , um die betreffende Seite ohne Konsequenzen zu schließen.

Wenn das Dialogfeld zu lang ist und die Schaltflächen nicht auf dem Bildschirm angezeigt werden , können Sie drückenEnter , um das Schließen der Seite zu bestätigen.

Wenn Sie keine Tastatur (Touchscreen-Geräte) haben, verwenden Sie das folgende Lesezeichen oder lesen Sie die Antwort von SimpleSimon (nur Chrome).


Nun einige Details.

Es gibt nur eine Möglichkeit, eine Aktion auszuführen, wenn eine Seite geschlossen wird: Durch das onbeforeunloadEreignis. Natürlich kann dies leicht gegen den Benutzer verwendet werden (zum Beispiel, wenn er versucht, eine Seite zu schließen, öffnet es die Kopie in einem neuen Fenster), so dass es sehr begrenzt ist.

Eigentlich ist das einzig Vernünftige, was Sie tun können, ein Dialogfeld mit benutzerdefiniertem Text und zwei Schaltflächen zu öffnen, eine zum Verlassen der Seite und eine zum Bleiben. Eine Seite kann mit diesem Dialogfeld nur den Text definieren. Schaltflächen und Titelleiste sind unveränderlich. Hier ist ein Screenshot von Firefox 3.6: ( sehr alte Version von Firefox)

Screenshot von Firefox 3.6

Natürlich können Sie sicher sein, dass einige Leute es früher oder später gegen Sie verwenden, wenn Sie Popups mit beliebigem Text und nur OK / Abbrechen- Schaltflächen anzeigen lassen.

Screenshot eines bösartigen Fensters aus Firefox 3.6

Im obigen Screenshot bedeutet OK nur "Diese Seite verlassen", aber die benutzerdefinierte Beschreibung schlägt etwas mehr vor. Daher haben Browser die Dialoge geändert, sodass es schwieriger ist, sie irreführend zu machen. Beispielsweise scheinen neuere Versionen von Firefox den benutzerdefinierten Text zu ignorieren:

Screenshot von Firefox 23

Chrome zeigt den benutzerdefinierten Text an, fügt jedoch immer eine Frage an, in der der Benutzer gefragt wird, was er tun möchte, und die Schaltflächen geben explizit ihre Aktionen an:

Screenshot von Chrome 29

Hier ist Internet Explorer 10, auch "katzenanfällig":

Screenshot aus IE 10

Opera 12 ignoriert das onbeforeunloadEreignis einfach und wenn Sie versuchen, einen Tab wie diesen zu schließen, wird er wie jeder andere geschlossen. Ich habe die neueste Version von Opera noch nicht getestet.

Also, um die wichtigsten Dinge zusammenzufassen:

  • Seiten können keine Dialoge mit Text anzeigen. Die Website kann den Browser auffordern, einen Dialog mit einem benutzerdefinierten Text anzuzeigen, aber der Browser kann ihn insgesamt ignorieren (Opera), allgemeinen Text verwenden (Firefox) oder explizit angeben, was passieren wird (Chrome, IE).
  • Die Details des Dialogfelds hängen vom verwendeten Browser ab, aber die Schaltflächen sind immer unveränderlich. Wenn sie nicht explizit sagen, wer was tut, bedeutet OK "diese Seite verlassen * und Abbrechen " hier bleiben ".
  • Websites können keine böswilligen Aktionen ausführen, wenn Sie sie verlassen. Ihre Dateien werden nicht durch Katzenvideos ersetzt, Sie werden nicht mit 135234-Viren überflutet und das FBI wird nicht darüber informiert, dass Sie illegale Software auf Ihrem Computer haben.

Sie können das onbeforeunloadEreignis deaktivieren , wenn Sie möchten, und so effektiv verhindern, dass Seiten Sie zum Verlassen oder Bleiben auffordern. Hier ist ein browserübergreifendes Userscript . (Bildlauf nach unten, wenn der Link tot ist)

Wenn Sie sich auf einer bestimmten Website befinden, auf der ein schädliches Popup angezeigt wird, und Sie immer noch nicht auf Verlassen klicken können , können Sie ein Lesezeichen erstellen, um es zu entfernen. Klicken Sie mit der rechten Maustaste auf die Lesezeichenleiste, wählen Sie " Neues Lesezeichen" (oder eine entsprechende Option) und fügen Sie diese als URL ein:

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

Klicken Sie dann einfach auf dieses Lesezeichen und das Popup wird vorübergehend von der aktiven Seite entfernt.

Wenn Sie testen möchten, wie diese Popups in Ihrem Browser aussehen, oder das Bookmarklet / Userscript testen möchten, erstellen Sie eine Textdatei mit dem folgenden Code und speichern Sie sie als .htmlDatei:

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

Es sieht so aus, als ob der Userscript-Link im Moment tot ist. Hier ist eine Kopie aus dem Cache von archive.org . Alle Kredite für den ursprünglichen Skriptschöpfer.

// ==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
quelle
2
Ich würde auf diesem zweiten "OK" drücken. Wer will schon nicht mehr Katzenvideos?
Daniel R Hicks
Oh, Javascript, um den Dialog zu deaktivieren. Nett!
user2357112 unterstützt Monica
Leider funktioniert dieses Userscript auf einigen Webseiten nicht zuverlässig. Der Dialog wird weiterhin angezeigt, obwohl window.onbeforeunload und window.onunload null sind. Ich weiß nicht, wie sie das schaffen, ich nehme an, der Handler wird irgendwann überschrieben und dann auf null zurückgesetzt, vielleicht bei einem Onclick-Ereignis.
Atan
10

Tatsächlich hat FireFox eine ziemlich raffinierte (und einfache) Lösung. Wenn Sie tippen

about:config

in die Adressleiste und scrollen Sie dann nach unten zu

dom.disable_beforeunload

Wenn Sie den Wert auf "True" setzen, werden die Popups "Leave Page" nicht mehr angezeigt. In Firefox. Schade, dass es in Chrome keine ähnliche Problemumgehung gibt.

Reverend Jim
quelle
7

Die einfachste Lösung in Chrome besteht darin, die Registerkarte zum Absturz zu bringen.

Tippe chrome: // crash in die Adressleiste und speichere als Lesezeichen .

Wenn Sie das nächste Mal eine solche Seite verlassen möchten, klicken Sie einfach auf das Lesezeichen und der Tab wird sofort geschlossen, ohne dass sich dies auf Ihre anderen Tabs auswirkt. Es ist nicht erforderlich, die gesamte Browsersitzung abzubrechen, wie einige andere vorgeschlagen haben.

Alternativ können Sie den Tab mit chrome: // hang aufhängen und den Tab dann einfach schließen, ohne dass JavaScript ausgeführt wird.

Nicht sicher, ob dies in anderen Browsern möglich ist.

SimpleSimon
quelle
Neuere Versionen dieser Seiten werfen bei jeder Benutzeraktion wie Mausklick oder Tastendruck ein weiteres Popup auf, sodass Sie nicht mehr
chrome
1

Dies ist das Ereignis window.onbeforeunload und eine Funktion des Webbrowsers. Dies sollte also ein fester Dialog des Webbrowsers sein. Sie können es in verschiedenen Browsern versuchen und sehen, dass die Dialoge unterschiedliche Designs haben.

Aber ich nehme an, Sie könnten ein Popup mit Javascript entwickeln, das dem ursprünglichen Popup des Browsers sehr ähnlich sieht. Und wenn es ein guter Entwickler ist, würde er auch den Browsertyp überprüfen, bevor der Dialog angezeigt wird. ;)

Um sich also sicher zu sein, dass es sich um ein Originaldialogfeld handelt, sollten Sie parallel das richtige Dialogfeld überprüfen, dh hier: http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm

Weitere Informationen zur Veranstaltung finden Sie hier:
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.microsoft.com/en-us/library/ms536907% 28VS.85% 29.aspx

Chris
quelle
0

Schnelle Problemumgehung, wenn Sie dem "Popup" und seinen Absichten / Aktionen nicht vertrauen:

Für Chrome:

  • Escape, um Popup zu entfernen

  • Klicken Sie mit der rechten Maustaste auf Seite

  • Wählen Sie Inspizieren

  • Scrolle nach oben

  • Klicken Sie mit der rechten Maustaste auf das Tag

  • Knoten löschen

  • Tab schließen

Ich bin sicher, dass die anderen Browser ähnliche Optionen haben.

George 2.0 Hoffnung
quelle
3
Schnellere Umgehung: Klicken Sie immer auf Diese Seite verlassen ;)
gronostaj