短网址精讲源码项目关键技术

短网址网页项目相关的关键技术:网页源码解析技术、HASH算法、KMP字符串匹配算法、正则表达式,并对其中一些技术在项目中的使用方法、具体实现和使用位置进行了说明。

短网址网页的DOM结构

码人网mrw.so缩短网址文章图片
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的可处理与系统平台和编程语言无关的可扩展标记语言的标准编程接口。在标准的DOM文档中,文档在解析后被转化为DOM树,树的每个节点是一个对象。DOM模型描述了文搜的结构,同时还定义了节点对象的行为,通过将对象的方法和属性与木马特征值进行匹配,将很大一定程度上提高木马特征值的匹配效率。网页DOM树结构。

短网址网页源码解析

在短网址系统中,当短网址网页爬虫将短网址网页源数据爬取到本地后,系统会开始对短网址网页源码进行解析。

首先使用jgroup解析器将html文件转化为xhtml,再依据DOM库生成xml文件并建立DOM树。从DOM树中分别获取到包含图片和包含文字的标签,记录其属性值,通过对比属性检测页面内容是否被篡改;由于DOM树中的节点按文档中的标记或信息片段来形成的,在加载整个文档成功构建DOM树后,将符合网页挂马类型的DOM树节点的关键字输出成事件序列,然后根据运些关键字再与此结果标签的短网址网页源码与数据库中短网址网页木马特征规则属性值通过KMP字符串匹配算法进行比对。这样从DOM树节点中找到关键字后就可以利用树型模型中的节点导航寻找特定源码信息,再与木马库的正则表达式进行进一步比对,从而确认短网址网页是否被挂马,此来提高检測短网址网页木马的效率,并减少因建立完整DOM树所消耗的资源。

短网址的Hash算法

短网址Hash算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为Hash值。Hash值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的Hash都将产生不同的值。MD5是一种符合工业标准的单向128位的Hash方案,MD5典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。

短网址系统在查询短网址网页是否被篡改时,先通过tidy工具结合String类里面的replace函数替换掉了内容基本不会变化的script和style标签,然后通过MD5加密短网址网页html代码与模板进行对比,若获取短网址网页的MD5编码与模板的相同则说明未篡改,否则进行字节匹配,查询具体的篡改位置。

短网址的KMP字符串对算法

KMP算法是由BF算法发展而来,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。实际发现在上述匹配过程中,有很多比较是多余的。而KMP算法中则尽量减少这神多余的匹配。其变化就在于KMP算法在匹配后,并不简单地从目标串S下一个字符开始新一轮的检测,而是依据在检测之前得到的有巧信息,构建模式画数,尽量跳过不必要的检测,从而达到一个较高的检测效率,使得问题的复杂度由0(mn)下降到0(m+n)。

例如:在串S="abcabcabdabba"中查找T="abcabd",若下标从0开始,先是比较S[0]和T[0]是否相等,然后比较S[1]和T[1]是否相等,我们发现一直比较到S问和T[5]才不等。

字符串匹配失败
  

在BF算法中,当这样一个失配发生时,T下标必须回溯到开始,S下标回溯的长度与T相同,然后S下标增1,然后再次比较。这次立刻发生了失配,T下标又回溯到开始,S下标增1,然后再次比较。此时还是发生了失配,T下标又回溯到开始,S下标増1,然后再次比较,发现匹配。

字符串匹配成功
 而在KMP算法中,其核也思想是利用己经得到的部分匹配信息来进行后面的匹配过程。看前面的例子,T问=‘d’的模式函数值等于2(next[5]=2),其实这个2表示T[5]=‘d’的前面有2个字符和开始的两个字符相同,且T阴=‘d’不等于开始的两个字符之后的第三个字符(T[2]=‘c,).

KMP模式函数

所此在S=‘‘abcabcabdabba’’中查找T="abcabd",如果使用KMP匹配算法,当第一次搜索到S[5]和T问不等后,S下标不是回溯到1,T下标也不是回溯到开始,而是根据T中巧5]=‘d’的模式函数值,直接比较別5阱T间是否相等,因此在第二次匹配后便完成此次工作。