31

На некоторых сайтах, таких как StackExchange, появляется сообщение «Вы уверены, что хотите покинуть эту страницу?"диалоговое окно, когда вы пытаетесь выйти при определенных условиях, например, если у вас есть сообщение, которое вы не закончили редактировать. Это полезно!

К сожалению, вредоносные или зараженные сайты любят использовать ту же функциональность, чтобы сказать: «Эй! Вы не установили наш вредоносный антивирус для борьбы со 111 вирусами, которые мы определенно не лгем о том, чтобы найти на вашем компьютере!», а параметры" Покинуть эту страницу "и" Оставаться на этой странице "заменены словами« Будьте в безопасности. Установите наш продукт "и" Стреляй себе в ногу ". Это бесполезно!

Javascript может делать некоторые неприятные вещи. Когда я получу один из тех диалогов, пытающихся удержать меня от явно вредоносного сайта, каким должен быть мой ответ? Безопасно ли нажимать кнопку "Покинуть эту страницу" или каким-либо другим образом заменить текст? Может ли сайт изменить поведение кнопки или перехватить мою попытку уйти и нарисовать свой собственный фальшивый диалог, который делает все, что захочет злоумышленник, когда я нажимаю на него?

5 ответов5

24

Несмотря на то, что некоторые из этих диалогов говорят, что они не могут сделать что-нибудь вредоносное. Вы всегда можете нажать кнопку « ОК» или « Покинуть страницу», чтобы без проблем закрыть страницу, которая вас обидела.

Если диалоговое окно слишком длинное и кнопки находятся за пределами экрана, вы можете нажать Enter, чтобы подтвердить закрытие страницы.

Если у вас нет клавиатуры (устройства с сенсорным экраном), используйте букмарклет ниже или посмотрите ответ SimpleSimon (только Chrome).


Теперь некоторые подробности.

Есть только один способ выполнить какое-либо действие при закрытии страницы: через событие onbeforeunload . Конечно, это может быть легко использовано против пользователя (например, когда он пытается закрыть страницу, он открывает свою копию в новом окне), поэтому он очень ограничен.

На самом деле единственная разумная вещь, которую вы можете сделать, это открыть диалоговое окно с пользовательским текстом и двумя кнопками, одна из которых покинет страницу, а другая - остаться. Единственное, что страница может сделать с этим диалогом, это определить его текст. Кнопки и заголовок неизменны. Вот скриншот из Firefox 3.6: (очень старая версия Firefox)

Скриншот из Firefox 3.6

Конечно, когда вы позволяете людям показывать всплывающие окна с любым текстом и просто нажимаете кнопку ОК / Отмена , вы можете быть уверены, что рано или поздно некоторые парни будут использовать его против вас.

Скриншот вредоносного окна от Firefox 3.6

На приведенном выше снимке экрана « ОК» означает просто "Покинуть эту страницу", но пользовательское описание предполагает нечто большее. Таким образом, браузеры изменили диалоги, поэтому их сложнее ввести в заблуждение. Например, последние версии Firefox, кажется, игнорируют пользовательский текст:

Скриншот из Firefox 23

Chrome показывает пользовательский текст, но всегда добавляет вопрос, спрашивающий пользователя, что он хочет сделать, и кнопки явно указывают свои действия: (но он по-прежнему подвержен сообщениям "cat videos"!)

Скриншот из Chrome 29

Вот Internet Explorer 10, также «склонный к кошкам»:

Скриншот из IE 10

Opera 12 просто игнорирует событие onbeforeunload и если вы попытаетесь закрыть такую вкладку, она закроется, как и любая другая. Впрочем, я не тестировал последнюю оперу.

Итак, подведем итог самым важным вещам:

  • Страницы не могут отображать диалоги с любым текстом. Веб-сайт может попросить браузер показать диалог с пользовательским текстом, но браузер может полностью его игнорировать (Opera), использовать общий текст (Firefox) или явно сказать, что произойдет (Chrome, IE).
  • Детали диалога зависят от браузера, который вы используете, но кнопки всегда неизменны. Если они не скажут явно, кто что делает, тогда OK означает «покинуть эту страницу *, а Отмена -" остаться здесь ".
  • Сайты не могут совершать какие-либо вредоносные действия, если вы решите их покинуть. Ваши файлы не будут заменены видео с кошками, вы не будете залиты 135234 вирусами и ФБР не будет проинформировано о том, что на вашем компьютере установлено нелегальное программное обеспечение.

Вы можете отключить событие onbeforeunload если хотите, эффективно не давая страницам просить вас покинуть или остаться. Вот кроссбраузерный пользовательский скрипт. (прокрутите вниз, если ссылка не работает)

Если вы находитесь на определенном веб-сайте с вредоносным всплывающим окном и все еще боитесь нажать « Выйти», вы можете создать букмарклет для его удаления. Щелкните правой кнопкой мыши на панели закладок, выберите « Новая закладка» (или эквивалент) и вставьте ее в виде URL-адреса: (это всего лишь мини-код из приведенной выше ссылки)

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

Затем просто нажмите на эту закладку, и всплывающее окно будет временно удалено с активной страницы.

Если вы хотите проверить, как эти всплывающие окна выглядят в вашем браузере, или протестировать букмарклет /userscript, создайте текстовый файл со следующим кодом и сохраните его как файл .html :

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

Кажется, что ссылка на пользовательский скрипт сейчас мертва, так что вот копия, извлеченная из кэша archive.org. Вся заслуга оригинального создателя сценария.

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

На самом деле, FireFox имеет довольно изящное (и простое) решение. Если вы печатаете

about:config

в адресную строку, затем прокрутите вниз до

dom.disable_beforeunload

и установите для него значение True, вы больше не увидите всплывающие окна Leave Page. В FireFox. Жаль, что в Chrome подобного обходного пути нет.

7

Самое простое решение в Chrome - отключить вкладку.

Наберите chrome:// сбой в адресную строку и сохраните как закладку.

В следующий раз, когда вы захотите покинуть такую страницу, просто нажмите на закладку, и она мгновенно убьет эту вкладку, не затрагивая другие ваши вкладки. Нет необходимости убивать весь сеанс браузера, как предлагали некоторые другие.

В качестве альтернативы вы можете повесить вкладку с помощью chrome://hang, а затем просто закрыть вкладку без запуска JavaScript.

Не уверен, что это возможно в других браузерах.

1

Это событие window.onbeforeunload и особенность веб-браузера. Так что это должен быть фиксированный диалог веб-браузера. Вы можете попробовать в разных браузерах, и вы видите, диалоговые окна имеют разные дизайны.

Но я предполагаю, что вы могли бы разработать всплывающее окно с javascript, которое выглядит очень очень похожим на оригинальное всплывающее окно браузера. И если он хороший разработчик, он также проверит тип браузера, прежде чем показывать диалог. ;)

Поэтому, чтобы быть уверенным в исходном диалоге, вы должны параллельно перепроверить правильный диалог, т.е. здесь:http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload.htm

Смотрите здесь для получения дополнительной информации о событии:
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.microsoft.com/en-us/library/ms536907%28VS.85%29.aspx

0

Быстрый обходной путь, если вы не доверяете всплывающему окну и его намерениям / действиям:

Для Chrome:

  • Побег, чтобы удалить всплывающее окно

  • Щелкните правой кнопкой мыши на странице

  • Выберите Осмотреть

  • Прокрутите вверх

  • Щелкните правой кнопкой мыши на теге

  • Удалить узел

  • Закрыть вкладку

Я уверен, что другие браузеры имеют аналогичные параметры.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .