恶意的“确认导航”对话框?


32

有些网站,例如StackExchange,弹出“您确定要离开此页面吗?”。在某些情况下尝试离开时会出现“对话”对话框,例如,如果您有帖子,则尚未完成编辑。这很有帮助!

不幸的是,恶意站点或受感染站点喜欢使用相同的功能来表示:“嘿!您尚未安装我们的恶意软件杀毒软件来解决我们绝对不打算在您的计算机上找到的111种病毒!”页”和“停留在此页上”选项被“安全。请安装我们的产品”和“射在脚上”之类的选项所代替。这无济于事!

JavaScript可以做一些令人讨厌的事情。当我收到其中一个试图阻止我离开一个明显恶意的网站的对话框时,我的回应是什么?单击“离开此页面”或用其替换文本的任何内容安全吗?网站是否可以更改按钮的行为,或者拦截我试图导航并绘制自己的虚假对话框的尝试,该虚假对话框会在我单击按钮时起到攻击者的作用?


1
我只是从进程浏览器或其等效程序中杀死整个浏览器进程。安全得多,因为您不知道按钮实际上在说什么。
Journeyman Geek

Answers:


24

尽管其中有些对话说了什么,但它们不能做任何恶意的事情。您始终可以单击“ 确定”或“ 离开页面”关闭违规页面,而不会造成任何后果。

如果对话框太长并且按钮不在屏幕上,则可以Enter确认关闭页面。

如果您没有键盘(触摸屏设备),请使用下面的书签,或查看SimpleSimon的答案(仅Chrome)。


现在,一些细节。

关闭页面时,只有一种方法可以执行某些操作:通过onbeforeunload事件。当然,这可以很容易地针对用户使用(例如,当他尝试关闭页面时,它会在新窗口中打开其副本),因此它非常有限。

实际上,您唯一可以做的合理的事情就是打开一个包含自定义文本和两个按钮的对话框,一个离开页面,一个停留。页面只能对该对话框执行的操作是定义其文本。按钮和标题栏是不可变的。这是Firefox 3.6的屏幕截图:(非常旧的Firefox版本)

Firefox 3.6的屏幕截图

当然,当您让人们用任何文本和“ 确定/取消”按钮显示弹出窗口时,那么您可以确定早晚有人会用它来对您不利。

Firefox 3.6中的恶意Windows的屏幕截图

在上面的屏幕快照中,“ 确定 ”仅表示“离开此页面”,但是自定义说明还提供了其他内容。因此,浏览器已更改了对话框,因此很难使它们产生误导。例如,Firefox的最新版本似乎忽略了自定义文本:

Firefox 23的屏幕截图

Chrome会显示自定义文本,但始终会附加一个问题,询问用户他想做什么,并且按钮会明确说明其操作:(但仍然容易出现“猫视频”消息!)

Chrome 29的屏幕截图

这是Internet Explorer 10,也很容易出现猫:

IE 10的屏幕截图

Opera 12只会忽略该onbeforeunload事件,并且如果您尝试像这样关闭选项卡,它将像其他任何选项一样关闭。不过,我还没有测试过最新的Opera。

因此,总结一下最重要的事情:

  • 页面无法显示带有任何文本的对话框。网站可以要求浏览器显示带有自定义文本的对话框,但浏览器可以完全忽略它(Opera),使用通用文本(Firefox)或明确说明会发生什么(Chrome,IE)。
  • 对话框的详细信息取决于您使用的浏览器,但是按钮始终是不可变的。如果他们没有明确说出哪个人在做什么,那么“ 确定”表示“离开此页面*,而取消则是”留在这里”。
  • 如果您决定离开网站,则网站无法执行任何恶意操作。您的文件不会被猫视频取代,不会被135234病毒淹没,也不会通知FBI您的计算机上有非法软件。

您可以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
我要在第二个按钮上按“确定”。毕竟,谁不想要更多猫视频?
Daniel R Hicks

哦,禁用该对话框的Javascript。真好!
user2357112在2013年

可悲的是,该用户脚本在某些网页上无法可靠运行。尽管window.onbeforeunload和window.onunload为null,仍然显示该对话框。我不知道他们如何做到这一点,我想处理程序在某个时候会被覆盖,然后在某些onclick事件上放回null。
阿坦(Atan)

10

实际上,FireFox有一个非常漂亮(且简单)的解决方案。如果您输入

about:config

进入地址栏,然后向下滚动到

dom.disable_beforeunload

并将其值设置为True,您将不再看到“离开页面”弹出窗口。在FireFox中。不幸的是,Chrome中没有类似的解决方法。


7

Chrome中最简单的解决方案是使标签页崩溃。

类型铬://碰撞到地址栏并保存为书签

下次您要离开此类页面时,只需单击书签,书签将立即杀死该选项卡,而不会影响其他选项卡。不需要像其他一些建议那样终止整个浏览器会话。

另外,您可以使用chrome:// hang挂起标签,然后直接关闭标签,而无需运行任何JavaScript。

不知道在其他浏览器中是否可行。


这些页面的较新版本将在诸如鼠标单击或按键之类的任何用户操作上引发另一个弹出窗口,因此您不再可以chrome:// crash
rsaxvc 2015年

1

这是window.onbeforeunload事件,是Web浏览器的功能。因此,这应该是Web浏览器的固定对话框。您可以在不同的浏览器中进行尝试,因此可以看到,对话框的设计不同。

但是我想,您可以使用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 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.