热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

弹出窗口拦截攻防

1.Pop-upBlockerWindowsXPSP2在InternetExplorer中增加了Pop-upBlocker(弹出窗口阻止程序),它可以阻止或屏蔽大部分的弹出窗口。对

1.Pop-up Blocker

Windows XP SP2在Internet Explorer中增加了Pop-up Blocker(弹出窗口阻止程序),它可以阻止或屏蔽大部分的弹出窗口。对于由最终用户点击链接打开的窗口不会被影响,另外来自本地网和信任站点域的弹出窗口也不会被阻止。

Pop-up Blocker默认为开启状态,这样可以阻止自动打开和在后台打开的弹出窗口,但是用户点击链接打开的窗口仍然可以正常显示。

启用 Pop-up Blocker
可以使用三种不同的方法启用 Pop-up Blocker。
? 第一次出现时的提示
在第一个弹出窗口出现之前出现提示,询问用户是否启用 Pop-up Blocker。
? “工具” 菜单
在 Internet Explorer 中,在 工具 菜单上,点击 屏蔽弹出窗口, 然后点击 阻止弹出窗口.
? Internet 选项.
在 Internet Explorer 的 工具 菜单上,点击 Internet 选项,点击隐私选项卡,然后点击 屏蔽弹出窗口。然后点击选项,对 Pop-up Blocker 加以设置。
 
当一个弹出窗口被屏蔽时:
当一个站点的弹出窗口被屏蔽时,会在状态栏上显示一个通知和播放一个声音,而且将在显示区域上边地址栏下边显示信息栏(您可以不播放声音和显示信息栏,参见后面的高级设置选项)。点击状态栏上的通知,可以看到一个带有如下选项的菜单:
? 显示被阻止的弹出窗口。重新加载弹出窗口。
? 允许来自该站点的弹出窗口。将当前站点添加到 “允许” 列表。
? 阻止弹出窗口。开启或关闭 Pop-up Blocker。
? 弹出窗口选项。打开 “ 弹出窗口管理” 窗口。
 
信息栏则会显示弹出窗口被屏蔽消息并通知用户可以通过点击信息栏允许弹出窗口和其他设置:
? 显示被阻止的弹出窗口。重新加载弹出窗口。
? 允许来自该站点的弹出窗口。将当前站点添加到 “允许” 列表。
? 设置是否阻止弹出窗口和显示信息栏以及更多高级设置。
? 信息栏帮助。

高级设置选项
信任站点列表
最终用户和IT管理员能够通过将一些网站加入信任站点列表从而允许这些网站的自动弹出窗口。

过滤级别设置和其他选项
三种过滤级别:
 高级:阻止所有的弹出窗口(可以通过按住ALT键点击链接打开窗口)
 中级:阻止大部分自动弹出窗口(默认级别)
 低级:允许安全站点的弹出窗口
其他选项:
 当一个弹出窗口被屏蔽时是否播放一段声音
 当一个弹出窗口被屏蔽时是否显示信息栏

*以下内容除非特别标注,否则都是在Pop-up Blocker的默认设置下。

阻止机理
Pop-up Blocker会屏蔽除了除createPopup()(IE5.5及以上版本支持,参见附录)之外的从脚本自动打开的任何窗口。受此影响的一些常用函数是:window.open(), showModelessDialog(), showModalDialog(), showHelp(), window.external.NavigateAndFind()。

 

2.检查方法
在已有的资料中,微软还没有提供可以检测用户是否打开了IE Blocker的功能,只是提供了如何检查窗口是否被阻止的方法。

对于window.open()打开的窗口,当窗口被阻止,那么函数将返回空值。当弹出被阻止时,在使用 window.open() 的返回值来避免脚本错误之前,请始终对该值进行检查。


 
 
  
 
 
 


 

这个例子显示如何检查函数返回值来判断用window.open()方法打开的弹出窗口是否被阻止。

对于使用showModelessDialog(), showModalDialog(), showHelp()自动打开的窗口,可以通过以下两种方式来处理弹出窗口被阻止的情况:
1 如果浏览器版本是IE 5.0及以上,那么就可以在Javascript代码中使用try/catch结构来处理。如下列代码所示:


 
 
 
 
 
  


 
 
 
 

在此例中,当页面初始化时通过openWin()函数自动打开的窗口将被阻止,并显示错误信息和错误代号。

2 让打开窗口的函数设置Javascript错误句柄。如下所示:


 
 
 
 
 


 
 
 

这个示例证明了通过设置错误句柄来捕获窗口被阻止时的异常信息。和以上方法一样,可以通过这种方式来通知用户禁用Pop-up Blocker或将站点加入可信站点域来查看弹出内容。

 

如何检测浏览站点的浏览器是否是SP2 中的 Internet Explorer
可以使用 window.navigator.userAgent 来检测。
var g_fIsSP2 = false;
function browserVersion()
{
   g_fIsSP2 = (window.navigator.userAgent.indexOf(“SV1”) != -1);
   if (g_fIsSP2)
   {
   //This browser is Internet Explorer in SP2.
   }
   else
   {
   //This browser is not Internet Explorer in SP2.
   }
}

如果用户代理字符串中包含“SV1”,说明连接到您站点的浏览器是 SP2 中的 Internet Explorer。

 

 

 

 

 

3.绕过拦截方法一

弹出窗口的网页插入的代码:

  Open.htm代码:

 

 

4.绕过拦截方法二

 ForceWindow.iclass.js代码如下(使用、讲解、相关说明全部在注释中):

————————————————————————–
/**
 * =========================================================================
 * 本程序可自由复制、修改、传播,不得删除以下信息。如用于商业用途须经原作者同意方可使用。
 * =========================================================================
 * 程序名称:ForceWindow(@iClass.JS)
 * 描  述:“冲破”广告拦截软件,强制弹出窗口。
 * 版  本:1.0.0
 * 创建时间:2004年1月19日
 * 修改时间:2004年1月19日
 * 文件名称:ForceWindow.iclass.js
 * 作  者:钟钟
 * 邮箱地址:zz@iecn.net zz315@163.com
 * 版权声明:本程序属于iClass.JS,版权归作者所有。
 * 有关iClass计划详见:http://www.iecn.net/forum/showthread.php?threadid=14811
 * =========================================================================
 */

/**
 * 定义ForceWindow类构造函数
 * 无参数
 * 无返回值
 */
function ForceWindow ()
{
  this.r = document.documentElement;
  this.f = document.createElement(“FORM”);
  this.f.target = “_blank”;
  this.f.method = “post”;
  this.r.insertBefore(this.f, this.r.childNodes[0]);
}

/**
 * 定义open方法
 * 参数sUrl:字符串,要打开窗口的URL。
 * 无返回值
 */
ForceWindow.prototype.open = function (sUrl)
{
  this.f.action = sUrl;
  this.f.submit();
}

/**
 * 实例化一个ForceWindow对象并做为window对象的一个子对象以方便调用
 * 定义后可以这样来使用:window.force.open(“URL”);
 */
window.force = new ForceWindow();

/**
 * 用本程序弹出的窗口将不会被广告拦截软件拦截,但有一个缺点:你无法象对window.open弹出的窗口那样对外观进行定制。
 * 你当然也可以在使用前实例化一个ForceWindow对象:
 * var myWindow = new ForceWindow();
 * 这样来使用:
 * myWindow.open(“URL”);
 * 本程序测试通过的浏览器:IE 5+、Firefox 1.0、Mozilla 1.7.5、Netscape 7.2、Opera 7.23
 * 友情提示:如果你将本程序用于强制弹出广告,请更多的想想浏览者的感受!
 */

 

 

 

5.绕过拦截方法三

绕过拦截的弹出窗口 ——————
    弹出窗口示例
    window_open.html
    faisun@sina.com
–>

 

 

6.其它不被拦截的情况

   对于页面中通过链接打开的窗口一般不会被拦截.

 当按住CTRL 键时 可以临时允许弹出窗口!


推荐阅读
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 类加载机制是Java虚拟机运行时的重要组成部分。本文深入解析了类加载过程的第二阶段,详细阐述了从类被加载到虚拟机内存开始,直至其从内存中卸载的整个生命周期。这一过程中,类经历了加载(Loading)、验证(Verification)等多个关键步骤。通过具体的实例和代码示例,本文探讨了每个阶段的具体操作和潜在问题,帮助读者全面理解类加载机制的内部运作。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 本文详细解析了LeetCode第215题,即高效寻找数组中前K个最大元素的问题。通过使用快速选择算法(partition),可以在平均时间复杂度为O(N)的情况下完成任务。本文不仅提供了算法的具体实现步骤,还深入探讨了partition算法的工作原理及其在不同场景下的应用,帮助读者更好地理解和掌握这一高效算法。 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 刷题笔记:探索乘积小于K的子数组问题 ... [详细]
  • 本次发布的Qt音乐播放器2.0版本在用户界面方面进行了细致优化,提升了整体的视觉效果和用户体验。尽管核心功能与1.0版本保持一致,但界面的改进使得操作更加直观便捷,为用户带来了更为流畅的使用体验。此外,我们还对部分细节进行了微调,以确保软件的稳定性和性能得到进一步提升。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
author-avatar
aloneloveu2005
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有