基于BHO构建轻量级上网行为监控系统

2013-09-08 10:18寇晓蕤
计算机工程与设计 2013年6期
关键词:浏览器网页页面

寇晓蕤

(中国华艺广播公司华广网,福建 福州350003)

0 引 言

互联网为信息获取和发布提供了无可比拟的便捷渠道,但在互联网的使用过程中也存在各种各样的负面问题,比如:互联网上存在大量的色情信息、不良言论,机构内用户可能在正常工作时间段内浏览娱乐和电子购物网站。针对上述情况,互联网网页信息过滤技术和系统已经获得了越来越广泛的应用。目前,该类系统主要有两个方向:针对个人用户的系统主要是用于未成年人保护,实现色情信息过滤和上网时间限制,比如Net Nanny[1]等;针对机构用户的系统通常以用户上网行为审计的形式实现,通过在机构网络出入口处统一部署服务器以实现全网信息的监控过滤,比如国内知名的深信服系统。该类系统功能全面,费用较高。本文基于浏览器辅助对象 (browser helper object,BHO)技术,实现了一个轻便的网页信息过滤系统,可同时满足上述两种需求,能够较为有效地实现不良信息封堵并定制需屏蔽的网站。

1 BHO技术的基本原理

(1)概况

BHO[2-6]是针 对IE (internet explorer)浏 览 器 的 第 三方开放式交互接口标准,通过这个接口,程序员可以编写代码以获取浏览器的行为和事件,比如 “前进”、“后退”、“刷新”等,也可以获取浏览器菜单、工具栏等组件的信息,甚至控制浏览器的行为,比如修改替换工具栏等,基于BHO的一切行为都被视为合法 (微软允许)。

(2)BHO插件形式

从实现的角度看[7,8],基于BHO的程序是一个动态链接库 (dynamic link library,DLL),它以进程内组件对象模型 (component object model,COM)对象的形式存在,以便在与浏览器相同的上下文环境中运行,并在每个浏览器启动时被加载。这样,一旦打开一个新的浏览器窗口,一个新的BHO对象就会生成,并能够对可用的模块和窗口执行任意操作。

IE浏览器加载和初始化BHO对象的原理如图1所示,每个BHO对象都会将其功能以一个接口的形式实现以供浏览器调用,这个接口就是 “IUnknown”。此外,每个BHO对象都必须在系统注册表中注册,以便实现在浏览器启动时自动加载。每个BHO对象都有一个全球唯一的身份标识号码 (identity,ID),由系统根据时间、硬件配置等信息随机生成。这个ID也被写入注册表中。

图1 IE浏览器加载和初始化BHO对象原理

(3)BHO插件的技术实现

BHO插件通常需要实现两个接口:“IObjectWithSite”和 “IDispatch”,前者用来获取浏览器接口,后者则用来监听浏览器的事件。BHO定义了若干事件,比如,“DISPID_BEFORENAVIGATE2”,“DISPID_DOCUMENTCOMPLETE”等,前者在网页超链接被点中时响应,后者在网页超文本标记语言 (hyper text markup language,HTML)源文件下载完成后响应。BHO插件可以监听这些事件并选择在适当的事件发生时进行相应操作,比如需要定制浏览器的程序开发人员可以选择在用户加载IE浏览器应用及浏览器主界面显示前加入自己的组件,在 “DISPID_BEFORENAVIGATE2”时将用户导向指定的超链接,而不是用户实际要访问的地址;在 “DISPID_DOCUMENTCOMPLETE”时替换页面或在页面源文件中插入代码。事实上,当一个网页全部下载完成后,BHO插件可获取一个动态HTML (dynamic HTML,DHTML)文档模型,通过该模型即可对下载的网页进行读写访问,从而完成页面替换、插入和脚本执行等操作。以上这些为实现网页过滤提供了便利。

2 关键问题及解决方案

(1)BHO插件注册问题

BHO插件最终形式为一个DLL。如前所述,每当IE浏览器启动时,BHO插件会被动态加载,这个特性实现的前提是BHO插件在注册表中注册。

当使用VC作为开发环境时,需使用活动模板库 (active template library,ATL)开 发[9,10]。 当 插 入 一 个 新 的ATL对象时 (假设名称为 “a”)会自动生成一个含有注册信息的 “a.rgs”,文件,内容的默认形式如下:

其中CLSID为默认生成的BHO对象全球唯一对象ID。

为了进行注册,需要对上述文件作两项修改:将 “%MODULE%”替换为BHO组件DLL对应的路径和文件名,并在上述文件内容后添加以下信息:

当构建好该文件后,执行 “regsvr32”命令即可实现BHO组件注册。

(2)用户浏览行为的监控问题

用户浏览行为监控是整个系统的核心功能,为了实现监控目标,应能够在用户访问不良网址前就对这个网址进行屏蔽,在用户所浏览页面已经下载完毕,但呈现给用户之前就能够对其中的不良信息以页面替换、脚本执行等形式进行处理和告警。为实现上述功能,首先需要捕获浏览器的部分事件并进行相应操作。进行ATL开发并插入 “IE ATL对象”后,系统会默认生成 “Invoke”函数,提供浏览器事件捕获的接口。

事件1:捕获 “DISPID_BEFORENAVIGATE2”事件,并记录用户浏览网址。若网址包含在非法网站网址列表中,则直接屏蔽该网站。

事件2:捕获 “DISPID_DOCUMENTCOMPLETE”事件,并获取用户浏览器所获取的HTML源文件以及当前浏览器窗口对象,为页面过滤、替换、告警等提供支撑。若源文件中包含敏感词,则直接进行过滤操作。

网站屏蔽和网页过滤使用页面替换及脚本执行的方式实现,具体处理方式如下:

网站屏蔽:将用户浏览的页面替换为空白页或警告页,同时使用脚本执行的方式弹出告警信息。

网页过滤:将用户浏览的页面替换为指定页面或将敏感词剔除后返回给用户,同时使用脚本执行的方式弹出告警信息。

以上过程中涉及的几个关键操作如下:

操作1 在 “Invoke”函数中取参数 “pDispParams”相关字段获取用户浏览网址;

操作2 使用 “get_Document”函数获取HTML源文件;

操作3 使用 “get_parentWindow”函数获取用户浏览器窗口对象指针;

操作4 使用 “put_innerHTML”函数实现页面替换;

操作5 使用 “execScript”函数实现脚本执行,该操作需依托用户浏览器窗口对象实现。

3 系统设计思路

(1)系统设计架构

针对网页过滤的应用需求,系统应实现以下功能:

1) 对于指定网站的过滤;

2)对于包含不良信息的网页的过滤,包含网页不良内容的屏蔽替换功能和全网页屏蔽功能;

3)对于全网用户违规网站和不良网页访问行为的监控;

4)对用户违规访问行为的告警和记录。

为实现上述功能,系统设计架构见图2。整个系统使用C/S模式,包含监控服务器和客户端两个部分,其中客户端安装于受监控的客户端主机上,实现对宿主机用户Web浏览行为的监控;服务器则安装于网内专用服务器上,以实现全网用户行为的监控。

从数据交互的角度看,管理员负责配置网址库和敏感词库的内容,这些内容通过服务器的过滤信息更新模块传递给客户端的相应模块并写入客户端本地网址库和敏感词库。此外,当对不良页面实施页面替换、脚本执行等操作时,需要替换后的页面源文件和脚本文件,这些信息也通过过滤更新模块由服务器传递给客户端并写入客户端本地文件系统。页面过滤模块以本地的网址库和敏感词库为依据,对不良网站和页面进行过滤。对于需要进行页面替换的,则从本地文件系统中读取相应文件进行页面替换;对需要进行提示警告的,从本地文件系统取脚本文件执行。客户端本地的监控结果通过状态监控模块定期返回给服务器,写入服务器结果库并呈现给管理员用户。

客户端包含3个底层数据库和3个功能模块,其中网址库、敏感词库和本地结果库分别存放了需要过滤的网址、敏感词,以及本地用户不良Web浏览行为的监控结果。网页过滤模块包含网址过滤、页面内容检查、页面替换和脚本执行等子模块,分别实现对指定网址的过滤、对宿主机用户所浏览的页面进行内容检查、对页面内不良的内容进行替换以及针对用户访问不良页面的行为用脚本执行的方式进行提示警告的功能。过滤信息更新模块负责对网址库和敏感词库的内容进行更新。状态监控模块负责本地系统的运行状态监控,并将本地监控结果上报给服务器。

图2 系统结构

服务器也包含3个底层数据库和3个功能模块,其中网址库、敏感词库和本地结果库分别存放了需要过滤的网址、敏感词,以及所有客户端用户不良Web浏览行为的监控结果。过滤信息更新模块负责将网址库和敏感词库的内容向各个客户端进行更新。状态监控模块负责所有客户端的运行状态监控,并负责接收所有客户端的监测结果。管理员接口模块与用户直接交互,接收管理员的配置信息并向其返回结果。

(2)改进策略

改进1 捎带的客户端主机心跳信号发送机制。

对于服务器而言,需要监控每个客户端的运行状态。为实现这一功能,在设计时引入 “心跳”机制,即客户端定期向服务器发送 “心跳”信号以向服务器证明自己处于开机、在线及正常运行状态,相应的服务器则定期检测每个客户端的心跳信号发送情况,以此协作实现状态监控目的。此外,客户端还要向服务器定期报告宿主机页面浏览的监控结果。综合考虑上述两个因素,为提高系统运行效率,在心跳信号发送方面采用以下策略:

策略1 心跳信号内容为宿主机页面浏览监控结果;

策略2 客户端初始启动时向服务器发送登录信号,格式同宿主机页面浏览监控结果,内容为空;

策略3 客户端启动后,每隔Th时间段向服务器发送“心跳”信号,若到期无页面浏览监控结果,则内容为空;

策略4 服务器保存一个客户端状态表,存放心跳信息及最近一次 “心跳”信号接收时间;

策略5 服务器设置定期检测状态表,时间间隔为Th,查看每个客户端最后一次 “心跳”信号接收时间距离当前时间的间隔Tl;

策略6 若Tl>=3* Th,则向客户端发送状态查询信号;

策略7 客户端若收到服务器的状态查询信号,则返回3倍Th时间段内的状态信息;

策略8 若服务器未收到客户端返回的状态查询信号,则认为客户端下线。

Tl设置为Th3倍的原因在于防止心跳信号丢失造成的误判,策略7配合该策略使用,以防止页面浏览监控结果的丢失。

改进2 模块化实现以提高系统适用性。

如前所述,系统需满足两类需求,即个人用户和机构用户。上述C/S模式适用于机构用户。考虑到个人用户的需求,系统采用模块化设计。用于个人用户时,状态监控模块不安装。此外,系统发布站点后台设置过滤信息更新模块,与客户端的相应模块进行通信以便进行过滤网址和关键词等信息的更新。

4 系统实现

基于上述设计,整个系统最终实现见图3。其中服务器组件包括一个用户接口 (user interface),两个功能线程,一个定时器,一个队列和一个数据库。“Client State”队列中包含了客户端状态报告信息,数据库中设置不同的表,分别存放监控结果、敏感词和需过滤网址。状态监控线程(state thread)实现两个功能,一是开启网络端口,接收客户端报告信息;二是通过定时器控制定期检测 “Client State”队列中各个客户端的报告信息。过滤信息更新线程(state update)实现数据库中的数据更新。

图3 系统实现组件组成

客户端组件包括一个定时器,两个功能线程,一个DLL和一个数据库。其中数据库中包含不同的表,分别存放监控结果、敏感词和需过滤网址。状态监控线程 (state thread)通过定时器控制,开启网络端口,向服务器定时报告信息并接受服务器的查询信息。过滤信息更新线程(state update)开启网络端口,从服务器接收更新数据。“WebPage.dll”是整个系统的核心组件,基于BHO实现用户网页浏览行为的监控。这个DLL的功能随着IE浏览器的启动而加载。

系统使用VC6.0平台开发,开发语言为C++,数据库管理系统采用SQL Server 2005,网络通信部分使用Win-Sock2,最终的协同界面如图4所示。

图4 系统界面

5 结束语

本文设计并实现了一个基于BHO劫持技术的网页信息过滤系统。由于使用了微软 “合法”的BHO插件技术并采用了恰当的模块化设计方案,相对针对个人用户的过滤系统和针对机构用户的上网行为审计设备而言,本文的系统能够以较小的代价和灵活的部署方式同时满足上述两种环境下的网站屏蔽和网页过滤的应用需求,具有良好的实用性和通用性。

[1]Net Nanny.Net Nanny net filter[EB/OL].[2012-10-12].http://www.netnanny.com/.

[2]Baidu.BHO[EB/OL].[2012-08-31].http://baike.baidu.com/view/362533.htm (in Chinese).[百 度 文 库.BHO [EB/OL].[2012-08-31.]http://baike.baidu.com/view/362533.htm.]

[3]FENG Xueping,LI Zhitang,XU Hao,et al.A method of malicious webpages behavior detection based on BHO technology[J].Journal of Guangxi University (Natural Science Edition),2011,36 (z1):122-126 (in Chinese).[冯雪坪,李芝棠,涂浩,等.基于BHO技术的恶意网页行为检测方法 [J].广西大学学报 (自然科学版),2011,36 (z1):122-126.]

[4]SANG Qingbing,WU Xiaojun.Research and implementation of BHO-based website filtering system [J].Computer Engineering and Applications,2009,45 (31):18-21 (in Chinese). [桑庆兵,吴小俊.基于BHO的网站过滤系统研究与实现 [J].计算机工程与应用,2009,45 (31):18-21.]

[5]JIANG Liya,HUO Hongtao.Filter of erotic images based on IE [J].Application Research of Computers,2009,26 (3):1180-1183 (in Chinese).[蒋丽亚,霍宏涛.基于IE浏览器的色情图像过滤器 [J].计算机应用研究,2009,26 (3):1180-1183.]

[6]WANG Juan,GUO Yongchong,WANG Qiang.Research of network covert channel based on BHO [J].Computer Engineering,2009,35 (5):159-161 (in Chinese). [王娟,郭永冲,王强.基于BHO的网络隐蔽通道研究 [J].计算机工程,2009,35 (5):159-161.]

[7]Vckbase.How to have your Internet Explorer custom-made with BHO [EB/OL].[2012-10-12].http://www.vckbase.com/index.php/Old/index/id/1426 (in Chinese).[VC 知 识库.如何使用BHO定制你的Internet Explorer浏览器 [EB/OL]. [2012-10-12].http://www.vckbase.com/index.php/Old/index/id/1426.]

[8]LU Qiming.Developing BHO plug-ins with VC++——having your explorer custom-made [EB/OL]. [2012-10-12].http://www.cnblogs.com/hbifts/articles/24265.html (in Chinese).[陆其明.VC++开发BHO插件——定制你的浏览器 [EB/OL].[2012-10-12].http://www.cnblogs.com/hbifts/articles/24265.html.]

[9]WANG Zhifei.Analysis of ATL intelligent pointers CComPtr and CComQIPtr [J].Journal of Liaoning Teachers College,2009,11 (4):37-39 (in Chinese). [王志飞.ATL智能指针类CComPtr与CComQIPtr解析 [J].辽宁师专学报,2009,11(4):37-39.]

[10]Christopher Tavares,Kirk Fertitta,Brent E Rector.ATL internals:Working with ATL 8 [M].2nd ed.Boston,Massachusetts,USA:Addison Wesley Professional,2006:137-159.

猜你喜欢
浏览器网页页面
刷新生活的页面
答案
基于HTML5与CSS3的网页设计技术研究
微软发布新Edge浏览器预览版下载换装Chrome内核
反浏览器指纹追踪
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
基于URL和网页类型的网页信息采集研究
Web安全问答(3)
浏览器