Вредоносные диалоги «подтверждения навигации»?


32

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

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

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


1
Я бы просто убил весь процесс браузера из Process Explorer или его эквивалент. Намного безопаснее, так как вы не знаете, что на самом деле говорит кнопка.
Подмастерье Компьютерщик

Ответы:


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.

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

  • Страницы не могут отображать диалоги с любым текстом. Веб-сайт может попросить браузер показать диалог с пользовательским текстом, но браузер может полностью его игнорировать (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);

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

Если вы хотите проверить, как эти всплывающие окна выглядят в вашем браузере, или протестировать букмарклет / скрипт пользователя, создайте текстовый файл со следующим кодом и сохраните его в виде .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);

2
Я бы нажал «ОК» на втором. В конце концов, кто не хочет больше видео о кошках?
Даниэль Р Хикс

Ох, Javascript, чтобы отключить диалог. Ницца!
user2357112 поддерживает Monica

К сожалению, этот скрипт не работает надежно на некоторых веб-страницах. Диалог все еще отображается, несмотря на то, что window.onbeforeunload и window.onunload имеют значение null. Я не знаю, как им удается это сделать, я полагаю, что обработчик перезаписывается в какой-то момент, а затем возвращается к нулю, может быть, на каком-то событии onclick.
Атан

10

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

about:config

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

dom.disable_beforeunload

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


7

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

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

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

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

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


Более новые версии этих страниц будут вызывать другое всплывающее окно при любом действии пользователя, например при щелчке мышью или нажатии клавиши, поэтому вы больше не сможете chrome: // crash
rsaxvc

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:

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

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

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

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

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

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

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

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


3
Более быстрое решение: всегда нажимайте " Покинуть эту страницу" ;)
gronostaj
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.