Finestre di dialogo "conferma navigazione" dannose?


32

Alcuni siti, come StackExchange, visualizzano un messaggio "Sei sicuro di voler uscire da questa pagina?" finestra di dialogo quando tenti di uscire in determinate condizioni, ad esempio se hai un post che non hai finito di modificare. Questo è utile!

Sfortunatamente, ai siti maligni o infetti piace usare la stessa funzionalità per dire "Ehi! Non hai installato il nostro antivirus malware per affrontare i 111 virus che sicuramente non mentiamo sulla ricerca sul tuo computer!" E il "Lascia questo pagina "e" Resta in questa pagina "le opzioni sono sostituite da qualcosa come" Sii sicuro. Installa il nostro prodotto "e" Sparati ai piedi ". Questo è inutile!

Javascript può fare cose cattive. Quando ricevo una di quelle finestre di dialogo che cercano di impedirmi di lasciare un sito chiaramente dannoso, quale dovrebbe essere la mia risposta? È sicuro fare clic su "Esci da questa pagina" o con qualunque cosa abbiano sostituito il testo? Un sito potrebbe cambiare il comportamento del pulsante o intercettare il mio tentativo di allontanarmi e disegnare la sua finta finestra di dialogo che fa tutto ciò che un utente malintenzionato vuole facendo clic su di esso?


1
Ucciderei l'intero processo del browser da Process Explorer o dal suo equivalente. Molto più sicuro, dal momento che non sai che il pulsante dice effettivamente.
Journeyman Geek

Risposte:


24

Nonostante ciò che dicono alcuni di questi dialoghi, non possono fare nulla di malevolo . Puoi sempre fare clic su OK o Lascia pagina per chiudere la pagina offensiva senza conseguenze.

Se la finestra di dialogo è troppo lunga e i pulsanti sono fuori dallo schermo , è possibile premereEnter per confermare la chiusura della pagina.

Se non si dispone di una tastiera (dispositivi touchscreen), utilizzare il bookmarklet in basso o vedere la risposta di SimpleSimon (solo Chrome).


Ora alcuni dettagli.

C'è solo un modo per eseguire alcune azioni alla chiusura di una pagina: attraverso l' onbeforeunloadevento. Naturalmente questo potrebbe essere facilmente utilizzato contro l'utente (ad esempio quando tenta di chiudere una pagina, ne apre la copia in una nuova finestra), quindi è molto limitato.

In realtà l'unica cosa ragionevole che puoi fare è aprire una finestra di dialogo con testo personalizzato e due pulsanti, uno per lasciare la pagina e uno per rimanere. L'unica cosa che una pagina può fare con quella finestra di dialogo è definire il suo testo. I pulsanti e la barra del titolo sono immutabili. Ecco uno screenshot di Firefox 3.6: ( versione molto vecchia di Firefox)

Schermata di Firefox 3.6

Naturalmente quando lasci che le persone mostrino i popup con qualsiasi testo e solo i pulsanti OK / Annulla , allora puoi essere sicuro che prima o poi alcuni ragazzi lo useranno contro di te.

Schermata di una finestra dannosa da Firefox 3.6

Nella schermata sopra, OK significa semplicemente "Lascia questa pagina", ma la descrizione personalizzata suggerisce qualcosa in più. Quindi i browser hanno cambiato le finestre di dialogo, quindi è più difficile renderle fuorvianti. Ad esempio, le versioni recenti di Firefox sembrano ignorare il testo personalizzato:

Schermata di Firefox 23

Chrome mostra il testo personalizzato, ma aggiunge sempre una domanda che chiede all'utente cosa vuole fare e i pulsanti dichiarano esplicitamente le loro azioni: (ma è ancora soggetto ai messaggi "video di gatti"!)

Schermata di Chrome 29

Ecco Internet Explorer 10, anche "incline al gatto":

Schermata di IE 10

Opera 12 ignora semplicemente l' onbeforeunloadevento e se provi a chiudere una scheda del genere, si chiuderà come qualsiasi altro. Non ho testato l'ultima Opera, però.

Quindi, per riassumere le cose più importanti:

  • Le pagine non possono mostrare dialoghi con nessun testo. Il sito Web può chiedere al browser di mostrare una finestra di dialogo con un testo personalizzato, ma il browser può ignorarlo del tutto (Opera), utilizzare un testo generico (Firefox) o dire esplicitamente cosa accadrà (Chrome, IE).
  • I dettagli della finestra di dialogo dipendono dal browser in uso, ma i pulsanti sono sempre immutabili. Se non dicono esplicitamente quale fa cosa, allora OK significa "lascia questa pagina * e Annulla è" rimani qui ".
  • I siti Web non possono eseguire azioni dannose se si decide di lasciarli. I tuoi file non verranno sostituiti con video di gatti, non sarai invaso da 135234 virus e l'FBI non verrà informato che hai un software illegale sul tuo computer.

onbeforeunloadSe lo desideri, puoi disabilitare l' evento, evitando efficacemente che le pagine ti chiedano di uscire o restare. Ecco uno script utente cross-browser . (scorrere verso il basso se il collegamento è morto)

Se ti trovi su un sito Web specifico che mostra un popup dannoso e hai ancora paura di fare clic su Lascia , puoi creare un bookmarklet per rimuoverlo. Fai clic con il pulsante destro del mouse sulla barra dei segnalibri, scegli Nuovo segnalibro (o equivalente) e incollalo come un URL: (è solo un codice miniato dal link sopra)

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

Quindi fai clic sul segnalibro e il popup verrà temporaneamente rimosso dalla pagina attiva.

Se vuoi testare come appaiono questi popup nel tuo browser o testare il bookmarklet / userscript, crea un file di testo con il seguente codice e salvalo come .htmlfile:

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

Sembra che il link userscript sia morto in questo momento, quindi ecco una copia estratta dalla cache di archive.org . Tutto il merito per l'autore originale dello script.

// ==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);

2
Premevo "OK" su quel secondo. Dopo tutto, chi non vuole altri video sui gatti?
Daniel R Hicks,

Ooh, Javascript per disabilitare la finestra di dialogo. Bello!
user2357112 supporta Monica

Purtroppo, quel parametro utente non funziona in modo affidabile su alcune pagine Web. La finestra di dialogo viene comunque visualizzata nonostante window.onbeforeunload e window.onunload siano nulli. Non so come riescano a farlo, suppongo che il gestore sia stato sovrascritto ad un certo punto e poi rimesso a zero forse in qualche evento onclick.
Atan,

10

In realtà, FireFox ha una soluzione piuttosto elegante (e facile). Se digiti

about:config

nella barra degli indirizzi, quindi scorrere fino a

dom.disable_beforeunload

e imposta il suo valore su True non vedrai più i popup della pagina di uscita. In FireFox. Peccato che non ci sia una soluzione simile in Chrome.


7

La soluzione più semplice in Chrome è bloccare la scheda.

Digita chrome: // crash nella barra degli indirizzi e salva come segnalibro .

La prossima volta che vuoi lasciare una pagina del genere, fai clic sul segnalibro e ucciderà immediatamente quella scheda, senza influire sulle altre schede. Non è necessario interrompere l'intera sessione del browser come altri hanno suggerito.

In alternativa puoi appendere la scheda usando chrome: // hang quindi semplicemente chiudere la scheda senza che JavaScript sia in esecuzione.

Non sono sicuro che ciò sia possibile in altri browser.


Le versioni più recenti di queste pagine generano un altro popup su qualsiasi azione dell'utente come il clic del mouse o la pressione dei tasti, quindi non è più possibile utilizzare Chrome: // crash
rsaxvc il

1

Questo è l'evento window.onbeforeunload e una funzione del browser web. Quindi questa dovrebbe essere una finestra di dialogo fissa del browser web. Puoi provare in diversi browser e così puoi vedere, le finestre di dialogo sono in diversi design.

Ma suppongo che potresti sviluppare un popup con javascript, che assomiglia molto al popup originale di quello del browser. E se è un buon sviluppatore, verificherebbe anche il tipo di browser prima di mostrare la finestra di dialogo. ;)

Quindi, per essere molto sicuri di una finestra di dialogo originale, è necessario eseguire un controllo incrociato in parallelo della finestra di dialogo corretta, ovvero qui: http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm

Vedere qui per ulteriori informazioni sull'evento:
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.microsoft.com/en-us/library/ms536907% 28VS.85% 29.aspx


0

Soluzione rapida se non ti fidi del "popup" e delle sue intenzioni / azioni:

Per Chrome:

  • Esci per rimuovere il popup

  • Fare clic con il tasto destro sulla pagina

  • Seleziona Ispeziona

  • Scorri verso l'alto

  • Fare clic con il tasto destro del mouse sul tag

  • Elimina nodo

  • Chiudi scheda

Sono sicuro che gli altri browser hanno opzioni simili.


3
Soluzione alternativa: fai sempre clic su Lascia questa pagina ;)
gronostaj
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.