2023年11月30日发(作者:)
反垃圾邮件系统的内容过滤模块设
计与实现
摘 要 介绍了一种反垃圾邮件系统的
内容过滤模块的总体设计,以及内容过滤模
块中采用的关键技术——多文档文本提取
技术,涉及HTML文档、PDF文档、MS-WORD
文档、CHM文档的文本提取技术,及压缩文
件中的文档处理技术,从而更好地完善反垃
圾邮件系统,以提高垃圾邮件识别率、拦截
率,降低资源的消耗。 关键词 垃圾邮件;
反垃圾邮件系统;过滤;模块
1 引言 国际互联网技术为人们进行交流、
协同工作、资源及内容共享等提供了一条崭
新途径。随着通信技术及计算机技术的飞速
发展,互联网络的使用日益普及,已成为当
前信息时代的一种极为重要的信息传播载
体,对社会的发展起到了巨大的推进作用,
且信息传播及时、便捷。据美国电脑工业年
鉴公司估计, 2010年全球互联网用户将超
过亿人。互联网络安全涉及到加密、计算机
病毒防范、入侵检测、接入控制、网上媒体
信息内容监管、安全管理、垃圾邮件处理等
众多关键技术问题。在电子邮件为我们提供
充分便利的同时,不断产生的垃圾邮件和不
良邮件也正在给我们的工作、生活制造着难
以计数的麻烦和无法预计的危害。 2004年
11月份的数字显示,垃圾邮件的比例接近
74%,在发送的垃圾邮件中,钓鱼欺诈性邮
件占了24%,这使得它成为了增长速度最快
的垃圾邮件类型,其它数量较大的垃圾邮件
类型包括广告、医疗、色情。 互联网络上
存在着海量媒体信息,皆可能成为邮件的内
容,就给邮件的处理带来复杂多样性,文字
监管问题也就显得越来越重要,当然也越来
越困难。虽然要求尽快建立垃圾邮件相关的
法律规范,倡仪通过法律手段制裁垃圾邮件,
解决垃圾邮件问题,但建立垃圾邮件相关的
法律规范本身就是一个较长时间的一个过
程,且垃圾邮件仍然会存在、产生并在传播。
信息产业部、中国互联网协会、中国通信标
准化协会2006年6月21日启动12321全国
反垃圾邮件总动员活动,普及反垃圾邮件知
识,营造绿色网络环境。中国互联网协会反
垃圾邮件中心公布的调查结果显示,目前反
垃圾邮件工作取得一定成效。从2006年3
月到2006年6月,中国互联网用户收到的
垃圾邮件比例由%下降到%。用户平均每周收
到垃圾邮件数量为封,与2006年3月的每
周封相比减少封。这即说明,反垃圾邮件仍
是一个持续又长久的过程。尽管《互联网电
子邮件服务管理办法》规定业已出台,但仍
要采取各种必要的措施进行预防及使用,这
如同法律一样不可缺,既要打击犯罪,又要
教育以预防犯罪。对邮件进行适时处理,阻
止垃圾邮件的泛滥成灾,通过总结策略,一
般采用的是关键字内容过滤技术,采取“截
获样本、解析特征、生成规则、规则下发、
内容过滤” 这种类似传统杀病毒系统的原
理。下面,就对邮件的内容过滤模块作一简
单研究分析。
2 内容过滤模块的总体设计 邮件过滤系统
设计思想主要是用来监控和拦截网络上传
输的含有有害信息的邮件数据报。针对这一
设计思想,可以把网络邮件过滤系统的主要
功能概括为以下几个模块。 (1)抓取数据报
文,即数据的分离过程; (2)对数据报文进
行过滤分析,对邮件数据包进行组合; (3)
查找设定的邮件地址、IP地址等过滤条件,
对邮件内容中的MIME编码进行解码,还原
出原始邮件内容,对内容进行分析,检索关
键字,对可疑邮件进行记录; (4)有关人员
通过专用的客户端软件查看可疑邮件,并远
程对软件的运行进行配置和管理。 图1 普
通电子邮件系统的SMTP服务过程 垃圾邮件
有很强的繁殖力,如果不加以整治,就会对
合法邮件造成危害,干扰互联网络的正常工
作。电子邮件过滤技术是目前反垃圾邮件用
到的主要技术。电子邮件过滤通常可以从两
方面实现:一种是基于客户端的垃圾邮件过
滤,一种是基于服务器端的垃圾邮件过滤。
而在网络中对可疑邮件 进行过滤、堵截的
最佳方法是基于服务器端的垃圾邮件过滤,
即通过在邮件服务器上加设邮件过滤器来
实现邮件过滤。 普通电子邮件系统的SMTP
服务过程如图1。 加了垃圾邮件过滤模块
的电子邮件系统的服务过程如图2: 图2.
加了垃圾邮件过滤模块的电子邮件系统的
服务过程 主要在于增添一个邮件数据提取
接口。当来自于Internet的邮件被通过POP3
等系统接收时,邮件数据提取接口将提取到
的邮件数据内容送交邮件过滤服务器,用户
暂时不阅览该邮件,而是等待邮件过滤服务
器的控制命令。内容过滤模块对邮件信息中
的文本内容进行检查与过滤。检查的对象具
体为邮件的其他部分内容、正文内容与文本
附件内容。邮件过滤服务器根据预定义的策
略和规则对邮件内容进行检查,并采用多线
程同时处理多封邮件,实现对邮件内容快速
扫描,并利用关键词库完成匹配,确定该邮
件是否为合法邮件。
3 内容过滤模块中关键技术——多文档文
本提取 多文档文本提取技术,主要见图
_To_Txt模块所描述的文档模块流程情况,
从文档中提取出纯文本流,再结合自动分词、
词频统计、关键词提取等过程完成文本的提
取。图3. All_To_Txt模块
HTML文档的文本提取技术 超文本标记语
言HTML是Web的通用语言,是创建Web页
和发布Web信息的格式,是Web设计的基础,
是控制Web浏览器在屏幕上显示内容的核心
技术。HTML用于编制可以在不同的平台上实
施链接的超文本文件。HTML的标记可以表达
超文本的新闻、邮件、文档及超媒体——包
含在线的图形、视像的信息体。 HTML文档
具有最基本的结构框架“头”和“体”。
HTML文档均用于在浏览器上显示,而支持
HTTP的浏览器均为WINDOWS式的图形用户接
口界面,因此HTML文档的基本结构是依据
这一要求而设计确定的。一个GUI的视窗通
常由标题栏和窗口体作为其最基本的构成。
HTML文档结构的“头”和“体”正应于这
一要求。 HTML容器标记 HTML文档的第一
个标记HTML是HTML的容器标记,它向浏览
器指示,其后的代码应使用由HTML制定的
语法和结构规则来处理。相应的结束标记
/HTML出现在文件的结尾处。 注意:不要把
HTML文档的任何文本放置在这两个标记的
外面,否则其结果是不可预见的。 头标记
HEAD和/HEAD是一对头标签,是标记文件头
区域的分界线,它包含着不在网页上直接实
施或显示的项目。有在浏览器的标题栏中显
示的文档标题名称和该文档有关的属性参
数。它是HTML文档的第一个部分,是一个
可选项。在文档头中能用于浏览显示的元素
仅有标题,其他的元素均不显示。 TITLE也
是一个可选元素,用一对标签
(TITLE…/TITLE)标记定义了在浏览器的标
题栏中显示的内容。标题元素总是嵌套在头
元素中的。 体标记 体是HTML文档中的主
体,反映在浏览器的屏幕的正文区域,它包
含了文档的内容——即在网页上可见的资
料。 BODY和/BODY是一对体标签,用于标
记除了头以外的其余的文档内容。与头元素
一样是一个复合元素,可在体标签内嵌套其
他的字符和元素。 一个最简单的HTML文档
的组成 头和体结合就能组成一个HTML文档。
PDF文档的文本提取技术 PDF的文件结构
(即物理结构)包括四个部分:文件头、文件
体、交叉引用表和文件尾。文件头(Header)
指明了该文件所遵从PDF规范的版本号,它
出现在PDF文件的第一行。如%表示该文件
格式符合规范。文件体(Body)由一系列的
PDF间接对象组成。这些间接对象构成了PDF
文件的具体内容如字体、页面、图像等等。
交叉引用表(Cross-reference Table)则是
为了能对间接对象进行随机存取而设立的
一个间接对象地址索引表。文件尾(Trailer)
声明了交叉引用表的地址,指明文件体的根
对象(Catalog),还保存了加密等安全信息。
根据文件尾提供的信息,PDF的浏览器可以
找到交叉引用表和整个PDF文件的根对象,
从而实现整个PDF文件的随机存取。PDF文
件主体文档架构反映了文件体中间接对象
间的等级层次关系。PDF的文档结构是一种
树型结构。树的根节点就是PDF文件的根对
象(Catalog)。根节点下有四个子树:页面
树(Pages Tree)、书签树(Outline
Hierarchy)、线程树(Article Threads)、
名字树(Named Destination)。PDF文本的物
理格式主要描速文字如何显示在页面上,包
括文字的字体、大小、颜色、位置等属性,
在多数的PDF文件中一般为了减少文件的大
小,都会对文本流进行压缩编码,常见是
deflate压缩编码。压缩的文本流需要先进
行解码,然后才可以得到便于理解的文本流。
PDF文件文本内容的基本提取过程为:先读
取PDF文件,可以根据查找、匹配特征标识
符来查找到文本对象,分离出文本流,进行
Deflate解码,得到含有文本内容的文本流,
根据语法分析,生成正确的text 格式。
PDF文件的版本一般存放在文件的头部,PDF
文件的其他一些信息,可以根据交叉应用表,
也可以根据特征标识符,定位该部分信息。
文件信息的提取,主要是通过文件结构找出
文件信息所在的位置,然后通过语法分析分
离出我们需要的部分,在通过编码或语法转
换,使生成正确的格式。由于文件的交叉引
用表可能会出现损害,可以根据特征标识符
来定位文件的信息存放的位置。
MS-Word / PowerPoint文档的文本提取
技术 Microsoft 的 Office 产品中,都提
供了OLE Automation 自动化程序的接口。
如果你使用VB,VBA 和 Script 脚本调用
Office 功能的话,其实比使用 VC 调用要
简单的多。比如在 WORD 中,调出菜单“工
具(T)宏(M)录制新宏(R)”,这时候它开始
记录你在 WORD 中任何菜单和键盘的操作,
把你的操作过程保存起来,以便再次重复调
用。而保存这些操作的记录,其实就是使用
了 VBA 程序。而我们下面要实现的功能,
也同样要参考 VBA 的方法。 为了更有逻辑,
更有层次地操作 Office,Microsoft 把应
用(Application)按逻辑功能划分为树形结
构,只有了解了逻辑层次,我们才能正确的
操纵 Office。举例来讲,如果给出一个
VBScript语句是: "c:"。那么,我们就知
道了,这个操作的过程是:第一步,取得
Application;第二步,从Application中
取得ActiveDocument;第三步,调用
Document 的函数 SaveAs,参数是一个字符
串型的文件名。 使用的基本步骤为:创建
一个 MFC 的程序工程。按照 VC6 操作,
Ctrl+W 执行 ClassWizard;Add
From a 在
Office 目录中,找到你想使用的类型库,
也可根据使用的 Office版本,从有关表中
查得相应的类型库文件。选择类型库文件后,
在弹出的对话窗中继续选择要添加的类。
初始化COM:方法一,找到App的
InitInstance()函数,在其中添加
AfxOleInit()函数的调用;方法二,在需要
调用COM功能的地方 CoInitialize(NULL),
调用完毕后 CoUninitialize()。在你需要
调用 Office 功能函数的 cpp 文件中为了
方便操作 VARIANT 类型变量,使用
CComVariant 模板类。
CHM文档的文本提取技术 CHM格式有一个
初始化头,占38H字节,后面是header
section和到正文段的偏移量。加在一起,
这些被称为文件头。header section一共有
两个section,一个是文件目录,另一个包
含着文件长度和一些未知信息。 初始化头,
header section 0及header section 1,
本段共84个字节,从这里开始往后都是数
据块,分为两种,一种是列表块(listing
chunks),一种是索引块(index chunks)其中
列表块的格式 开始是四个字节PMGL,然后
的四个字节是目录块尾部的空白区的长度
或是quickref区域的长度,第三双字恒为0,
第四双字是前一个列表块的块号,如果这是
第一个块,该值为-1,第五双字是后一个列
表块的块号,如果这是最后一块,该值为-1,
从这里开始是目录列表项,按文件名排序,
并且大小写不分,quickref区是从数据块的
后面向前写,每隔n个项出现一个quickref,
且n的值为1+(1“密度”),其格式从后至
前为;第一个字:整个数据块中的项数,第
二个字:从第0项到第n项之间的偏移量,
第三个字:从第0项到第2n项之间的偏移
量,以此类推;目录列表的每一项的格式
encint型名字长度,后面是UTF-8编码的名
称,encint型正文段,encint型偏移量,
encint型长度,其中偏移量是从解压缩之后
的正文段的开始来计算的,同样长度也是表
示解压缩之后的长度。在目录中存在两种文
件,用户数据文件和格式信息文件,格式信
息文件以两个连续的冒号“::”开头,用
户数据文件以“/”开头。 索引块:前四个
字节为PMGI,后面四个字节是块尾部的
quickref或是空白区的长度。从这里开始是
目录索引项的开始,每一个目录索引项的结
构 encint型的名称长度,UFT-8编码的名
称,以此名称开始的列表块的块号。
quickref的格式和排列与列表块中相同。
当有索引块的层次较多时,将不再存储数据
块号而是存储下一层的索引号。正文:在版
本3中,正文一般紧跟着文件头,而且在文
件头表之后有一个双字用来指定其位置。在
版本2中,正文部分紧跟着文件头,而且所
有此类文件中的正文部分的第0段都放在这
个位置上,其它的正文段都放在within
content section 0 名称列表文件:content
section 0中,文件名为
"::DataSpace/NameList",其中包含着所有
正文段的名称,其格式 第一个字:以字计
数的文件长度;第二个字:文件中的entry
数; 对于每一个entry格式为: 第一个字:
以字计数的名字长度,不包括最后的NULL
结尾符,以word 0表示所有entry的结束。
名称的编码类似于UFT-16。 段的名称目前
为止只有两种,Uncompressed和
MSCompressed,分别表示自解释文件和
Microsoft LZX压缩算法压缩的文件。
section data: 对于段号不为0的段,还有
一个文件为::DataSpace/ Storage/Section
Name/Content,里面存放着该段的压缩信息,
所以,当解析非0段时,需要两步工作,第
一步,取得第0段并将其解圧,取得段名,
第二步才能利用段名找到相应的段。其余与
格式相关的文
件:::DataSpace/Storage/SectionName/C
ontrolData 共0x20个字节,存储关于压缩
的信息; 压缩段:这一段用LZX压缩,要
进行解压缩,先要读
取:::DataSpace/Storage/SectionName/T
ransform/{7FC28940-9D31-11D0-9B27-00A
0C91E9C7C}/InstanceData/ResetTable。
压缩文件中的文档处理技术 RAR文档的处
理方法 (1) RAR文档的格式简介 Rar文件
由许多不定长度的数据区组成,这些数据区
的顺序是可变的,但是第一个数据区一定是
由一个标志块和文档头组成的。如下图为一
个rar文件的基本格式,该rar文件中压缩
了多个文档:标志块文档头文件头一数据区
一文件头二数据区二文件头三数据区
三……其中标志块的内容是固定的: 0x52
0x61 0x72 0x21 0x1a 0x07 0x00;文档头
格式内容
HEAD_CRCHEAD_TYPEHEAD_FLAGSHEAD_SIZER
ESERVED1RESERVED2长度212224意义数据
CRC类型: 0x73标志数据区大小保留保留数
据CRC是对文档头的CRC校验和,可以用其
判断文档头是否错误;数据区类型: 0x73表
示该数据结构是文档头;数据区大小是指文
档头的长度。文件头格式
HEAD_CRCHEAD_TYPEHEAD_FLAGSHEAD_SIZEP
ACK_SIZEUNP_SIZEHOST_OS2122441数据CRC
类型: 0x74标志数据区大小压缩后大小压缩
前大小操作系统
FILE_CRCFTIMEUNP_VERMETHODNAME_SIZEAT
TRFILE_NAME441124不定长文件CRC压缩时
间解压需版本压缩方法文件名长度文件属
性文件名数据CRC是对文档头的CRC校验和,
可以用其判断文件头是否错误;数据区类型:
0x74表示该数据结构是文件头;数据区大小
是指文件头的长度。文件压缩前后大小对解
压数据区十分重要,如果错误就无法对数据
区进行定位。操作系统: 0 - MS DOS;1 -
OS/2;2 - Win32;3 - Unix文件CRC是对
文件数据区的CRC校验和,可以用其判断文
件数据区是否错误。 RAR文档的解压RAR文
件的解压主要是调用中的函数。 ZIP文件格
式的处理方法 ZIP文件格式分析如下图为
一个zip文件的基本格式,该zip文件中压
缩了多个文档.图4 zip文件格式 在压缩了
多个文档的zip文件中,每个被压缩的文档
都带有一个本地文件头,中央目录和数据区,
这三个结构是一一对应的。其中本地文件头
和中央目录区包含了对应压缩文档的基本
信息,数据区则存储该文档压缩后的数据。
zip文件尾部包含了整个zip文件的基本信
息。 ZIP文件格式的解压ZIP文件的解压主
要是调用中的函数。
4 总结 以上主要介绍了一种反垃圾邮件系
统的内容过滤模块的多文档文本提取技术,
涉及HTML文档、PDF文档、MS-WORD文档、
CHM文档的文本提取技术,及压缩文件中的
文档处理技术,更好地运用于反垃圾邮件过
滤系统中,不断完善反垃圾邮件系统,以提
高垃圾邮件识别率、拦截率,降低资源的消
耗。
参考文献1 孟莉,全红艳.电子邮件过滤系
统的设计与实现.管理信息系统. 周勇生.
电子邮件是如何工作的. 新潮电子, (总第
54期):993 冯晓芳. 反垃圾邮件仍需继续
12321举报电话启用/ 2006-06-22
13:41 4 落红卫,刘建毅,王枞,钟义信.
智能邮件过滤系统的研究与实现.机电产品
开发与创新. 胡金初. 计算机网络. 北京:
清华大学出版社,20046 杨锦川,张熙等.
电脑安全X档案. 昆明:云南人民出版社,


发布评论