Diálogos maliciosos de "confirmação de navegação"?

32

Alguns sites, como o StackExchange, exibem a mensagem "Tem certeza de que deseja sair desta página?" caixa de diálogo ao tentar sair em determinadas condições, como se você tiver uma postagem que ainda não terminou de editar. Isso é útil!

Infelizmente, sites mal-intencionados ou infectados gostam de usar a mesma funcionalidade para dizer: "Ei! Você não instalou nosso antivírus de malware para solucionar os 111 vírus que definitivamente não estamos mentindo sobre encontrar no seu computador!" E o "Deixe isto as opções da página "e" Fique nesta página "são substituídas por algo como" Esteja seguro. Instale nosso produto "e" Dê um tiro no pé ". Isso é inútil!

Javascript pode fazer algumas coisas desagradáveis. Quando recebo uma dessas caixas de diálogo tentando me impedir de sair de um site claramente malicioso, qual deve ser minha resposta? É seguro clicar em "Sair desta página" ou com o que eles substituíram o texto? Um site poderia alterar o comportamento do botão ou interceptar minha tentativa de navegar para fora e desenhar sua própria caixa de diálogo falsa que faz o que um invasor deseja quando clico nele?

user2357112 suporta Monica
fonte
11
Eu acabaria com todo o processo do navegador do Process Explorer ou seu equivalente. Muito mais seguro, pois você não sabe que o botão realmente diz.
Journeyman Geek

Respostas:

24

Apesar do que dizem alguns desses diálogos, eles não podem fazer nada malicioso . Você sempre pode clicar em OK ou em Sair da página para fechar a página ofensiva sem consequências.

Se a caixa de diálogo for muito longa e os botões estiverem fora da tela , você pode pressionarEnter para confirmar o fechamento da página.

Se você não possui um teclado (dispositivos com tela de toque), use o bookmarklet abaixo ou consulte a resposta do SimpleSimon (somente Chrome).


Agora, alguns detalhes.

Só há uma maneira de executar alguma ação quando uma página é fechada: através do onbeforeunloadevento. É claro que isso poderia ser facilmente usado contra o usuário (por exemplo, quando ele tenta fechar uma página, abre sua cópia em uma nova janela), por isso é muito limitado.

Na verdade, a única coisa razoável que você pode fazer é abrir uma caixa de diálogo com texto personalizado e dois botões, um para sair da página e outro para ficar. A única coisa que uma página pode fazer com essa caixa de diálogo é definir seu texto. Os botões e a barra de título são imutáveis. Aqui está uma captura de tela do Firefox 3.6: ( versão muito antiga do Firefox)

Captura de tela do Firefox 3.6

É claro que quando você permite que as pessoas mostrem pop-ups com qualquer texto e apenas os botões OK / Cancelar , você pode ter certeza de que mais cedo ou mais tarde alguns caras o usarão contra você.

Captura de tela de uma janela maliciosa do Firefox 3.6

Na captura de tela acima, OK significa apenas "Sair desta página", mas a descrição personalizada sugere algo mais. Portanto, os navegadores mudaram as caixas de diálogo, tornando mais difícil torná-las enganosas. Por exemplo, versões recentes do Firefox parecem ignorar o texto personalizado:

Captura de tela do Firefox 23

O Chrome mostra o texto personalizado, mas sempre anexa uma pergunta, perguntando ao usuário o que ele deseja fazer e os botões explicitamente explicam suas ações: (mas ainda é propenso às mensagens "vídeos de gatos"!)

Captura de tela do Chrome 29

Aqui está o Internet Explorer 10, também "propenso a gatos":

Captura de tela do IE 10

O Opera 12 simplesmente ignora o onbeforeunloadevento e, se você tentar fechar uma guia assim, ela será fechada como qualquer outra. Eu não testei o Opera mais recente, no entanto.

Então, para resumir as coisas mais importantes:

  • As páginas não podem mostrar diálogos com nenhum texto. O site pode solicitar que o navegador mostre uma caixa de diálogo com um texto personalizado, mas o navegador pode ignorá-lo completamente (Opera), usar texto genérico (Firefox) ou dizer explicitamente o que acontecerá (Chrome, IE).
  • Os detalhes da caixa de diálogo dependem do navegador que você está usando, mas os botões são sempre imutáveis. Se eles não disserem explicitamente qual deles faz o quê, então OK significa "sair desta página * e Cancelar é" ficar aqui ".
  • Os sites não podem executar ações maliciosas se você decidir deixá-los. Seus arquivos não serão substituídos por vídeos de gatos, você não será inundado por vírus 135234 e o FBI não será informado de que possui software ilegal no seu computador.

Você pode desativar o onbeforeunloadevento, se desejar, impedindo efetivamente que as páginas solicitem sua saída ou permanência. Aqui está um script de usuário para vários navegadores . (role para baixo se o link estiver inoperante)

Se você estiver em um site específico que mostra um pop-up malicioso e ainda tem medo de clicar em Deixar , crie um bookmarklet para removê-lo. Clique com o botão direito do mouse na barra de favoritos, escolha Novo favorito (ou equivalente) e cole-o como um URL: (é apenas um código reduzido no link acima)

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

Em seguida, basta clicar nesse marcador e o pop-up será temporariamente removido da página ativa.

Se você deseja testar a aparência desses pop-ups no navegador ou testar o bookmarklet / userscript, crie um arquivo de texto com o seguinte código e salve-o como um .htmlarquivo:

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

Parece que o link userscript está morto no momento, então aqui está uma cópia extraída do cache archive.org . Todo o crédito para o criador do 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);
gronostaj
fonte
2
Eu pressionaria "OK" naquele segundo. Afinal, quem não quer mais vídeos sobre gatos?
Daniel R Hicks
Javascript para desativar a caixa de diálogo. Agradável!
User2357112 suporta Monica
Infelizmente, esse script de usuário não está funcionando de maneira confiável em algumas páginas da web. A caixa de diálogo ainda é mostrada, apesar de window.onbeforeunload e window.onunload serem nulos. Não sei como eles conseguem fazer isso, suponho que o manipulador seja sobrescrito em algum momento e, em seguida, devolvido a nulo, talvez em algum evento onclick.
Atan
10

Na verdade, o FireFox tem uma solução bastante bacana (e fácil). Se você digitar

about:config

na barra de endereço e role para baixo até

dom.disable_beforeunload

e defina seu valor como True, você não verá mais os pop-ups Deixar página. No FireFox. Pena que não há uma solução semelhante no Chrome.

Reverendo Jim
fonte
7

A solução mais simples no Chrome é travar a guia.

Digite chrome: // trava na barra de endereço e salve como marcador .

Da próxima vez que você quiser sair dessa página, basta clicar no marcador e ela eliminará a guia instantaneamente, sem afetar as outras guias. Não há necessidade de matar a sessão inteira do navegador, como alguns outros sugeriram.

Como alternativa, você pode travar a guia usando chrome: // travar e simplesmente fechar a guia sem que o JavaScript seja executado.

Não tenho certeza se isso é possível em outros navegadores.

SimpleSimon
fonte
As versões mais recentes dessas páginas lançam outro pop-up em qualquer ação do usuário, como clique do mouse ou pressionamento de tecla, para que você não possa mais fazer o chrome: // crash
rsaxvc
1

Este é o evento window.onbeforeunload e um recurso do navegador da web. Portanto, esse deve ser um diálogo fixo do navegador da web. Você pode tentar em diferentes navegadores e, assim, pode ver, as caixas de diálogo têm diferentes designs.

Mas suponho que você possa desenvolver um pop-up com javascript, que se parece muito com o pop-up original do navegador. E se for um bom desenvolvedor, ele também verificaria o tipo de navegador antes de mostrar a caixa de diálogo. ;)

Para ter certeza de uma caixa de diálogo original, verifique paralelamente a caixa de diálogo correta, ou seja, aqui: http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm

Consulte aqui para obter mais informações sobre o 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
fonte
0

Solução rápida se você não confiar no "pop-up" e em suas intenções / ações:

Para o Chrome:

  • Escape para remover pop-up

  • Clique com o botão direito na página

  • Selecione Inspecionar

  • Role para o topo

  • Clique com o botão direito na tag

  • Excluir nó

  • Aba fechada

Tenho certeza de que os outros navegadores têm opções semelhantes.

George 2.0 Hope
fonte
3
Solução mais rápida