随着信息技术和互联网的普及发展, 网站和网页得到了广泛应用, 它给政府部门和企事业单位的生产、经营、管理以及人们的工作和生活带来极大的便利。与此同时, 网页的非法复制、网页的仿冒现象也日益严重, 是一个亟待解决的问题。网页水印是近年来出现的网页保护的一项技术, 它通过某种方式在网页中嵌入版权标识信息或身份认证信息 (水印) , 当发现网页遭到非法复制或仿冒时, 可以提取这些信息来证明网页的版权归属, 鉴别网页的真伪, 从而确认非法复制和仿冒行为。除此之外, 网页水印技术还可用于网页防篡改、在网页中隐藏和传递秘密信息等方面。
与传统的图像、视频和音频水印技术的研究相比, 网页水印技术的研究目前还很少。网页的构造与图像、音频文件不同, 常用的图像和音频水印技术不适用于网页水印。表示网页的HTML代码结构简单、冗余度少, 在网页中嵌入水印难度较大。现有的网页水印嵌入方法主要是基于HTML语言对于一些信息的改变不敏感的原理, 通过改变这些不敏感的信息来实现水印信息的嵌入。比如, 通过改变标签名和属性名的大小写实现水印信息的嵌入, 通过改变空格的个数实现水印信息的嵌入,通过定义不存在的标签实现水印信息的嵌入,以及使用不同的代码格式实现水印信息的嵌入等。
以上这些网页水印的嵌入方法存在明显的不足。改变大小写或改变空格数的方法会使得HTML代码的大小写或空格数不断变换, 很容易被识别, 水印的隐蔽性不好, 抗检测能力很弱, 只要用一个简单的过滤系统将HTML代码中所有字母改成小写或所有空格数改为一个, 便能轻松去除水印。对于使用不存在的标签的方法, 由于HTML代码中的标签是固定的, 定义不存在的标签很容易被识别, 隐蔽性和抗攻击能力也不强。最后一种方法虽然隐藏性好一些, 但是代码嵌入点很少, 水印信息容量小。
针对上述问题, 本文提出一种基于空样式的网页水印的嵌入方法, 将水印信息转换为HTML代码中的样式, 嵌入到网页的HTML代码中, 该水印具有很好的隐蔽性和抗攻击性。
1、样式与空样式
网页是一种存储在Web服务器上, 通过网络进行传输, 被浏览器解析和显示的文档类型, 其内容由HTML语言构成。
网页的样式是指使得网页页面显示达到一定效果的辅助代码或文件, 它可以改变网页中元素的外观, 如改变按钮的颜色、表格的大小等。网页的样式一般会用层叠样式表CSS进行封装, 将一系列样式封装在一起并存储在CSS文件中, HTML使用样式名调用封装的样式, 以显示样式所定义的外观。
样式通常由样式名和表示样式内容的定义构成。如果一个样式只有样式名, 没有内容定义, 则可将其称为空样式。根据CSS规范, HTML中的元素不会匹配错误的或者不存在的样式名, 因此上述调用不会进行任何操作。同时, 上述调用不违反HTML的语法规范, 对网页的运行不会产生任何影响。本方法利用HTML的这种特性, 将水印信息转换为自定义的空样式嵌入到HT-ML代码中, 实现水印的嵌入与提取。
2、水印信息预处理
水印信息通常为一组带有版权、归属权等信息的字符串, 由英文、中文或其他字符组成。为了便于水印信息的嵌入, 需要把水印字符串转换成一定形式的编码, 如常用的ASCII编码。ASCII码对于嵌入英文水印信息比较方便, 为了便于嵌入中文和其他字符, 使方法更具通用性, 本文采用UNICODE编码。UNICODE编码把包括中文、英文在内的各种语言和符号用4位十六进制数表示。
3、空样式的设计
经过预处理之后, 原始水印信息被转换为由UNICODE编码表示的十六进制的码串。下一步任务是将十六进制的水印信息码串转换成HTML的空样式并嵌入到网页中。水印信息码串包含数字0~9和字母a~f共16种码元, 我们设计16个不同的空样式一一对应这16种码元。空样式的设计遵循以下两个方面的原则:一方面, 样式的名字与HTML代码的内容要有一定的联系, 具有合理性和真实性, 让人觉察不到它是空样式, 从而使水印具有良好的隐蔽性;另一方面, 空样式的名字不能与现有样式的名字相同, 若命名相同, 则会导致水印信息提取出错。
4、空样式的嵌入
在设计好水印信息码元对应的空样式后, 下一步任务是将空样式嵌入到HTML代码中。
在HTML代码中, 网页上要显示的内容通常包含在一个个的层级元素中。这种方式不是很好, 一方面会增加div, class这些与水印信息无关的字符串, 增大了网页文件的大小;另一方面, 嵌入的语句有些明显, 隐蔽性不够好, 可能会被察觉出来。我们利用HT-ML的样式可以叠加的特点, 将空样式作为一个叠加的样式嵌入到已存在的层级之中, 而不添加新的语句。
实现步骤
1、水印的嵌入
第1步水印信息预处理。将水印信息的每个字符转换为对应的UNICODE码, 形成十六进制的水印信息码串。
第2步设计空样式。根据网页HTML代码中样式命名的特点, 设计16个空样式, 每个空样式对应一种十六进制的水印信息码元, 形成一个空样式表。
第3步将水印信息转换成空样式。根据空样式表, 将十六进制的水印信息码串的每一个码元转换成对应的空样式。
第4步空样式的嵌入。查找网页HTML代码中的样式, 依次将每个空样式叠加插入到原有的样式之后。
2、水印的提取
第1步提取空样式。根据空样式表中的样式名, 从网页的HTML代码中依次提取出每个空样式。
第2步生成十六进制水印信息码串。对照空样式表, 将提取的每个空样式转换成对应的十六进制的水印信息码元, 从而形成十六进制的水印信息码串。
第3步生成原始水印信息。根据UNICODE编码, 将十六进制的水印信息码串转换成对应的水印信息字符串。
性能评价
网页水印的性能主要有隐蔽性、抗攻击性以及水印嵌入容量等。隐蔽性是指阻碍人识别出网页中存在水印信息的能力;抗攻击性是指嵌入的水印在经受攻击后仍能被正常提取的能力, 网页水印的攻击手段主要有格式变换、水印检测等;水印容量则是可以嵌入水印信息量的大小。
如前所述, 现有的几种网页水印方法将水印信息转换为HTML代码中的不同格式, 这种做法使得水印信息和HT-ML代码严重分离, 水印的痕迹比较明显, 容易被识别, 一些简单的攻击方式就能破解。与这些方法相比, 基于空样式的网页水印方法具有更好的隐蔽性和抗攻击性。一方面, 空样式名与原有样式名非常相似, 不易引起注意和怀疑;另一方面, 样式内容的定义通常存放在CSS文件中, 水印的攻击者根据HTML代码难以区分其中的真实样式和空样式, 无法检测到空样式的存在。如果试探性地修改样式名, 会有很大的风险, 若改动了真实样式名, 会对页面的显示产生影响, 因此较难用过滤系统去除网页中的水印信息。
本文地址://www.qlpinke.com//article/2019/0308/5758.html