Зловмисні діалоги "підтвердити навігацію"?


32

На деяких сайтах, як StackExchange, з'являється повідомлення "Ви впевнені, що хочете залишити цю сторінку?" діалогове вікно, коли ви намагаєтесь залишити за певних умов, наприклад, якщо у вас є публікація, яку ви не закінчили редагувати. Це корисно!

На жаль, зловмисні або заражені сайти люблять використовувати ту саму функціональність, щоб сказати: "Ей! Ви не встановили наш антивірус для зловмисного програмного забезпечення для вирішення 111 вірусів, які ми точно не брешемо знайти на своєму комп’ютері!", І "Залиште це сторінку "та" Залишайтеся на цій сторінці "параметри замінюються на кшталт" Будьте в безпеці. Встановіть наш продукт "та" Стріляйте в ногу ". Це непомітно!

Javascript може зробити деякі неприємні речі. Коли я отримую один із таких діалогів, які намагаються не давати мені залишати явно шкідливий сайт, якою повинна бути моя відповідь? Чи безпечно натиснути "Залишити цю сторінку" або те, що вони замінили текст? Чи міг сайт змінити поведінку кнопки чи перехопити мою спробу переміщення та намалювати власне підроблене діалогове вікно, яке робить все, що хоче зловмисник, коли натискаю на нього?


1
Я б просто вбив весь процес браузера від провідника процесу або його еквівалента. Набагато безпечніше, оскільки ви не знаєте, що кнопка насправді говорить.
Подорожник Geek

Відповіді:


24

Незважаючи на те, що кажуть деякі з цих діалогів, вони не можуть зробити нічого шкідливого . Ви завжди можете натиснути кнопку " ОК" або " Залишити сторінку", щоб закрити порушену сторінку без наслідків.

Якщо діалогове вікно занадто довге, а кнопки вимкнені з екрана , ви можете натиснути,Enter щоб підтвердити закриття сторінки.

Якщо у вас немає клавіатури (пристроїв із сенсорним екраном), скористайтеся закладок нижче або перегляньте відповідь SimpleSimon (лише Chrome).


Тепер, деякі деталі.

Є лише один спосіб виконати якусь дію, коли сторінка закривається: через onbeforeunloadподію. Звичайно, це можна легко використати проти користувача (наприклад, коли він намагається закрити сторінку, вона відкриває її копію в новому вікні), тому вона дуже обмежена.

Насправді єдине розумне, що ви можете зробити, - це відкрити діалогове вікно зі спеціальним текстом та двома кнопками, одна - щоб залишити сторінку, а одна - залишитися. Єдине, що сторінка може зробити в цьому діалоговому вікні - це визначити її текст. Кнопки та заголовки незмінні. Ось скріншот від Firefox 3.6: ( дуже стара версія Firefox)

Знімок екрана з Firefox 3.6

Звичайно, коли ви дозволяєте людям показувати спливаючі вікна з будь-яким текстом і просто кнопками ОК / Скасувати , ви можете бути впевнені, що рано чи пізно деякі хлопці використають його проти вас.

Знімок екрана шкідливих вікон від Firefox 3.6

На наведеному вище скріншоті ОК означає просто "Залишити цю сторінку", але власний опис пропонує щось більше. Тож браузери змінили діалоги, тому важче зробити їх оманливими. Наприклад, останні версії Firefox, здається, ігнорують нестандартний текст:

Знімок екрана з Firefox 23

Chrome показує нестандартний текст, але завжди додає запитання, запитуючи користувача, що він хоче робити, а кнопки чітко вказують свої дії: (але він все ще схильний до повідомлень про "котячі відео"!)

Знімок екрана з Chrome 29

Ось Internet Explorer 10, також "схильний до котів":

Знімок екрана з IE 10

Opera 12 просто ігнорує onbeforeunloadподію, і якщо ви спробуєте закрити вкладку так, вона закриється, як і будь-яка інша. Я не перевіряв останню оперу.

Отже, підводячи підсумки найважливіших речей:

  • Сторінки не можуть відображати діалоги з будь-яким текстом. Веб-сайт може попросити браузер показати діалогове вікно зі спеціальним текстом, але браузер може взагалі проігнорувати його (Opera), використовувати загальний текст (Firefox) або прямо сказати, що буде (Chrome, IE).
  • Деталі діалогового вікна залежать від браузера, який ви використовуєте, але кнопки завжди незмінні. Якщо вони не скажуть прямо, хто робить що, тоді ОК означає "залишити цю сторінку *, а Скасувати -" залишитися тут ".
  • Веб-сайти не можуть виконувати жодних шкідливих дій, якщо ви вирішите залишити їх. Ваші файли не будуть замінені на відео з котами, ви не будете залиті 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>

Здається, що посилання usercript зараз мертве, ось ось копія, витягнута з кешу 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
Я б натиснути "ОК" на цій другій. Зрештою, хто не хоче більше котячих відео?
Daniel R Hicks

О, Javascript, щоб відключити діалогове вікно. Приємно!
user2357112 підтримує Моніку

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

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:

  • Втечі, щоб видалити спливаючі вікна

  • Клацніть правою кнопкою миші на сторінці

  • Виберіть «Оглянути»

  • Прокрутіть до початку

  • Клацніть правою кнопкою миші на тезі

  • Видалити вузол

  • Закрити вкладку

Я впевнений, що інші веб-переглядачі мають подібні параметри.


3
Швидше вирішення: завжди натисніть Залишити цю сторінку ;)
gronostaj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.