一种快速查询黑白名单的系统及方法

文档序号:6557492阅读:387来源:国知局
专利名称:一种快速查询黑白名单的系统及方法
技术领域
本发明涉及计算机技术领域,更具体地说,涉及一种快速查询黑白名单的系统及方法。
背景技术
黑白名单是用于记录某些内容是否能通过的数据表,在白名单中的项即为可以通过的项,在黑名单中的项即为需阻止的项。通常在具体实现时,黑白名单记录在同一张数据表中,并用一个标志字段(flag)表示该项为黑名单中的项还是白名单中的项(比如flag=0为黑名单中的项,而flag=1为白名单中的项)。
例如对于网页浏览中的网址过滤,即URL过滤,通常使用URL作为数据库的关键字(KEY),并使用标志字段区分黑白名单。在网址过滤中,黑白名单一般需要支持域名分级和通配符(*)。
如图1所示,网址过滤典型的过滤方法是首先做全路径URL(例如http://a.b.c.d/dir/file.html)测试,如果从数据库中查询的flag=0,则表示该URL在黑名单,阻止对该URL的访问;如果flag=1,则表示该URL在白名单,对该URL的访问直接通过。
如果该URL在数据库中无记录则再测试该域名(http://a.b.c.d),如果从数据库中查询到flag=0,则阻止对URL的访问;如果flag=1,则对URL的访问直接通过。
如果域名(http://a.b.c.d)在数据库中也无记录,则开始做通配符(http://*.b.c.d)测试,如果从数据库中查询得到的flag=0,则阻止对URL的访问;如果flag=1,则对于URL的访问直接通过。如果在数据库中没有记录,则继续拆分域名做通配符(http://*.c.d)测试,如果还不在数据库中则继续拆分做通配符测试,直到只剩下最后一级。若此时还不在黑白名单中,则按照预定的过滤策略,确定是否阻止对URL的访问。
上述直接查询数据库实现黑白名单的方法,每测试一次都要查询一次数据库。由于在实际应用中,很少将全路径URL写入黑白名单中,在极端情况下,例如支持域名做两级星号通配符替换,需要查询4次数据库(一次全路径URL,一次全域名,一次一级星号替换,一次二级星号替换)。而频繁的数据库查询将造成对计算机资源的极大浪费。
如果将黑白名单项全部缓存到内存中,势必占用较多内存,不适合黑白名单较大的情况。

发明内容
本发明要解决的技术问题在于,针对上述的黑白名单查询中占用较多资源并且效率较低的问题,提供一种快速查询黑白名单的系统及方法。
本发明解决上述技术问题的技术方案是,提供一种快速查询黑白名单的系统,包括用于查询黑白名单中是否包括待检测关键字的查询单元,还包括数组创建单元,用于将黑白名单中的所有关键字分别作运算后根据运算值生成数组;数组存储单元,用于存储所述数组创建单元创建的数组;匹配单元,用于将待测试的关键字作运算后将所述待测试的关键字的运算值与所述数组存储单元中的数组进行比对,并在待测试的关键字的运算值与所述数组匹配时,使查询单元查询黑白名单中是否存在待测试的关键字。
在本发明所述的一种快速查询黑白名单的系统中,所述数组创建单元进一步包括数组生成单元,用于生成数组,所述生成的数组的每一位都为0;第一运算单元,用于依次将黑白名单中的每一关键字作运算;第一拆分单元,用于将所述运算所得运算值的多个字节拆分为多组数值;数组维护单元,用于将所述数组中与所述第一拆分单元拆分获得的多组数值对应的位分别设置为1。
在本发明所述的一种快速查询黑白名单的系统中,所述匹配单元进一步包括第二运算单元,用于将待测试的关键字作运算;第二拆分单元,用于将待测试关键字运算值的多个字节拆分为多组数值;比较单元,分别查询并判断所述数组中与拆分待测试关键字运算值获得的多组数值对应的位是否为1,若所述数组中所有对应的位都为1,则确定待测试的关键字的运算值与所述数组匹配,使查询单元查询黑白名单中是否存在待测试的关键字。
在本发明所述的一种快速查询黑白名单的系统中,还包括关键字拆分单元,用于在所述比较单元判断数组中对应的位中包括0且待测试关键可拆分时,或者在查询单元确认所述待测试关键字不存在于黑白名单中且待测试关键可拆分时,拆分所述待测试关键字,并使所述匹配单元将拆分后的待测试关键字与数组进行匹配。
在本发明所述的一种快速查询黑白名单的系统中,所述数组创建单元和匹配单元对关键字所作运算为哈希运算,所述运算值为哈希值,所述数组生成单元生成的数组中位的数量不小于黑白名单中关键字数量的2倍。
本发明还提供一种快速查询黑白名单的方法,包括以下步骤(a)将黑白名单中的所有关键字分别作运算后根据运算值生成数组;(b)将待测试的关键字作运算,并将所述待测试的关键字的运算值与所述数组进行比对,若待测试的关键字的运算值与所述数组匹配,则执行步骤(c);(c)查询黑白名单,并判断所述待测试的关键字是否存在于黑白名单中,若所述待测试的关键字存在于黑白名单中,则执行步骤(d);(d)根据黑白名单策略对初始关键字进行操作。
在本发明所述的一种快速查询黑白名单的方法中,所述步骤(a)进一步包括(a1)生成数组,并将该数组中的所有位设置为0;(a2)依次将黑白名单中的每一关键字作运算;
(a3)将得到的每一运算值的多个字节分为多组数值;(a4)将所述数组中与步骤(a3)中的多组值对应的位分别设置为1。
所述步骤(b)进一步包括(b1)将待测试的关键字作运算;(b2)将待测试的关键字的运算值的多个字节分为多组数值;(b3)分别查询并判断所述数组中与步骤(b2)中多组值对应的位是否为1,若所述数组中所有对应的位都为1,则确定待测试的关键字的运算值与所述数组匹配,执行步骤(c)。
在本发明所述的一种快速查询黑白名单的方法中,所述步骤(b3)进一步包括(b31)若所述数组中对应的位中包括0,则判断所述待测试关键是否可以拆分,若可以拆分,则执行步骤(b32);否则确定初始待测试关键字不在黑白名单中,并执行步骤(d);(b32)拆分所述待测试关键字,并将拆分获得的关键字作为待测试关键字,返回步骤(b1)。
在本发明所述的一种快速查询黑白名单的方法中,所述步骤(a)和步骤(b)中的运算为哈希运算,所述运算值为哈希值,所述步骤(a1)中的数组大小为8K字节,所述步骤(a3)及所述步骤(b2)中,所述哈希值的每两个字节组成一组,共分为8组。
在本发明所述的一种快速查询黑白名单的方法中,所述步骤(c)中进一步包括(c1)若所述待测试关键字不存在于黑白名单中,判断所述待测试关键是否可以拆分,若可以拆分,则执行步骤(c2);否则确定初始待测试关键字不在黑白名单中,并执行步骤(d);(c2)拆分所述待测试关键字,并将拆分获得的关键字作为待测试关键字,返回步骤(b)。
本发明一种快速查询黑白名单的系统及方法,通过待测试关键字的运算值比对后再查询黑白名单,减少了查询过程中对数据库中黑白名单的访问,实现了快速判定待测试关键字的黑白名单状态。本发明对于分级通配符下的黑白名单查询效果较佳,且仅占用少量内存。


下面将结合附图及实施例对本发明作进一步说明,附图中图1是现有查询黑白名单的流程示意图;图2是本发明一种快速查询黑白名单的系统实施例的结构示意图;图3是图2中数组创建单元的结构示意图;图4是图2中匹配单元的结构示意图;图5是本发明一种快速查询黑白名单的方法实施例的流程图;图6是图5中创建数组的流程图;图7是图5中判断哈希值是否匹配数组的流程图。
具体实施例方式
本发明通过一个数组记录黑白名单中每一关键字(包括完整的URL、域名和被星号替换过的情况),并由该数组过滤掉不在黑白名单表的情况,从而在外层屏蔽对数据库的过多访问。
如图2所示,是本发明一种快速查询黑白名单的系统实施例的结构示意图。该系统包括数组创建单元21、数组存储单元22、匹配单元23、查询单元24、黑白名单存储单元25以及执行单元26。
黑白名单存储单元25用于存储黑白名单。该黑白名单中的关键字根据用户添加的内容生成,包括完整的URL、域名、通配符替换后的域名等。查询单元24用于查询黑白名单存储单元25中的黑白名单是否包括待检测关键字。执行单元26用于根据查询单元24的查询结果执行相关操作,例如在查询单元24查询到待检测关键字在黑名单中时,阻止对该关键字的访问;在查询单元24查询到待检测关键字在白名单中时,直接通过对该关键字的访问;在查询单元24查询未在黑白名单中查询到待检测关键字时,根据预定策略阻止或通过对该关键字的访问。上述的黑白名单存储单元25、查询单元24以及执行单元26与现有的黑白名单方案中的实现方式类似。
数组创建单元21用于将黑白名单中的所有关键字分别作哈希运算,并根据哈希值生成数组。在本实施例中,采用高质量哈希函数MD5函数,经过哈希运算后的哈希值为16字节。当然,在具体实现时,也可采用其它哈希函数。
数组存储单元22用于存储数组创建单元21创建的数组。该数组存储单元22位于内存,从而可实现快速访问。当然,数组创建单元21创建数组后,可先存储于硬盘,在执行黑白名单查询时再将数组导入数组存储单元22。
匹配单元23用于将待测试的关键字作哈希运算后,将该待测试的关键字哈希值与数组存储单元22中的数组进行比对,并在待测试的关键字的哈希值与数组匹配时,使查询单元24查询黑白名单中是否存在该待测试的关键字。
当然,在具体实现时,并不限于通过数组存储黑白名单中关键字对应的哈希值,也可通过列表等方式存储。
如图3所示,在本实施例中,数组创建单元21进一步包括数组生成单元214、第一哈希运算单元211、第一拆分单元212以及数组维护单元213。
数组生成单元214用于生成数组,该生成的数组的每一位都为0。在本实施例中,数组的大小为8K字节。
第一哈希运算单元211用于依次将黑白名单中的每一关键字作哈希运算。在本实施例中,第一哈希运算单元211采用MD5函数,每一关键字经哈希运算后的哈希值为16字节。
第一拆分单元212用于将运算所得哈希值的多个字节拆分为多组数值。在本实施例中,第一拆分单元212将16字节的哈希值中每两个字节为一组,共拆分成8组数值。每组数值为两个字节共16位,与数组的大小对相应。
数组维护单元213用于将所述数组中与第一拆分单元拆分获得的多组数值对应的位分别设置为1。
如图4所示,在本实施例中,匹配单元23进一步包括第二哈希运算单元231、第二拆分单元232以及比较单元233。
第二哈希运算单元231用于将待测试的关键字作哈希运算。同样,第二哈希运算单元231采用MD5函数,每一关键字经哈希运算后的哈希值为16字节。
第二拆分单元232用于将待测试关键字哈希值的多个字节拆分为多组数值。同样,第二拆分单元232将16字节的哈希值中每两个字节为一组,共拆分成8组数值。
比较单元233用于分别查询并判断数组中与拆分待测试关键字哈希值获得的8组数值对应的位是否为1,若数组中所有对应的8位都为1,则确定待测试的关键字的哈希值与数组匹配,使查询单元24查询黑白名单中是否存在待测试的关键字。
当然,上述的数组大小并不限于8K,且每一哈希值被分成的组数在具体应用中可以不同。上述数组存在假阳性(即待测试关键字的哈希值与数组匹配而在黑白名单中不存在该关键字)的情况,当数组中值为1的位太多时,假阳性的概率会很高。为了达到最佳的黑白名单查询,数组中位的数量应不小于黑白名单中关键字的数量的2倍。另外假阳性的概率还与哈希值分成的组数有关,组数越多则概率越小。经统计,当数组中值为0和1位的比率是1∶1时,假阳性概率和所分成的组数(k)基本满足下列关系假阳性百分率=Nk,其中N为数组的饱和度,即数组中值为1的位占数组中总位数的比率,例如当数组中值为0和1的位的比率为1∶1时,数组饱和度为50%。k为哈希值被分成的组数。
在本发明一种快速查询黑白名单的系统的另外一个实施例中,还包括关键字拆分单元,用于在比较单元233判断数组中对应的位中包括0且待测试关键可拆分时,或者在查询单元24确认所述待测试关键字不存在于黑白名单中且待测试关键可拆分时,拆分待测试关键字(例如拆分为域名或带有通配符的域名等),并使匹配单元23将拆分后的待测试关键字与数组进行比对。
如图5所示,是本发明一种快速查询黑白名单的方法实施例的流程图,其具体包括以下步骤步骤S51将黑白名单中的所有关键字分别作哈希运算后根据哈希值生成数组。在本实施例中,采用MD5函数进行哈希运算,经过哈希运算后的哈希值为16字节。
步骤S52将待测试的关键字作哈希运算。
步骤S53将所述待测试的关键字的哈希值与数组进行比对,若待测试的关键字的哈希值与所述数组匹配,则执行步骤S55;否则执行步骤S54。
步骤S54进一步判断待测试关键字是否可拆分。若该待测试关键字可拆分,则执行步骤S57;否则执行步骤S56。
步骤S55查询黑白名单,并判断所述待测试的关键字是否存在于黑白名单中。若所述待测试的关键字存在于黑白名单中,则执行步骤S56;若待测试关键字不存在于黑白名单中,则进一步判断待测试关键是否可以拆分,若可以拆分,则执行步骤S57;否则确定初始待测试关键字不在黑白名单中,并执行步骤S56。
步骤S56根据黑白名单策略对初始关键字进行操作。
步骤S57拆分待测试关键字,并执行步骤S52。例如将完整的URL拆分为域名或者包含通配符的URL。
如图6所示,上述图5中的步骤S51进一步包括步骤S61生成数组,并将该数组中的所有位设置为0。
步骤S62依次将黑白名单中的每一关键字作哈希运算。
步骤S63将得到的每一哈希值的多个字节分为多组数值。
步骤S64将所述数组中与步骤S63中的多组值对应的位分别设置为1。
如图7所示,图5中的步骤S53进一步包括步骤S71将待测试的关键字作哈希运算。
步骤S72将待测试的关键字的哈希值的多个字节分为多组数值。
步骤S73分别查询并判断所述数组中与步骤S72中多组值对应的位是否为1。若数组中所有对应的位都为1,则确定待测试的关键字的哈希值与所述数组匹配,执行步骤S55;若数组中对应的位中包括0,则判断待测试关键字是否可以拆分,若可以拆分,则拆分待测试关键字,并将拆分获得的关键字作为待测试关键字,返回步骤S71;否则确定初始待测试关键字不在黑白名单中,并执行步骤S56。
当然,本发明并不限于上述实施例的哈希算法,任何可将任意长度二进制值映射为固定长度的较小二进制值的算法均可代替上述的哈希算法,并实现本发明的技术效果,例如常用的编码算法或明文(ASCII、Unicode等)转换等。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种快速查询黑白名单的系统,包括用于查询黑白名单中是否包括待检测关键字的查询单元,其特征在于,还包括数组创建单元,用于将黑白名单中的所有关键字分别作运算后根据运算值生成数组;数组存储单元,用于存储所述数组创建单元创建的数组;匹配单元,用于将待测试的关键字作运算后将所述待测试的关键字的运算值与所述数组存储单元中的数组进行比对,并在待测试的关键字的运算值与所述数组匹配时,使查询单元查询黑白名单中是否存在待测试的关键字。
2.根据权利要求1所述的一种快速查询黑白名单的系统,其特征在于,所述数组创建单元进一步包括数组生成单元,用于生成数组,所述生成的数组的每一位都为0;第一运算单元,用于依次将黑白名单中的每一关键字作运算;第一拆分单元,用于将所述运算所得运算值的多个字节拆分为多组数值;数组维护单元,用于将所述数组中与所述第一拆分单元拆分获得的多组数值对应的位分别设置为1。
3.根据权利要求2所述的一种快速查询黑白名单的系统,其特征在于,所述匹配单元进一步包括第二运算单元,用于将待测试的关键字作运算;第二拆分单元,用于将待测试关键字运算值的多个字节拆分为多组数值;比较单元,分别查询并判断所述数组中与拆分待测试关键字运算值获得的多组数值对应的位是否为1,若所述数组中所有对应的位都为1,则确定待测试的关键字的运算值与所述数组匹配,使查询单元查询黑白名单中是否存在待测试的关键字。
4.根据权利要求3所述的一种快速查询黑白名单的系统,其特征在于,还包括关键字拆分单元,用于在所述比较单元判断数组中对应的位中包括0且待测试关键可拆分时,或者在查询单元确认所述待测试关键字不存在于黑白名单中且待测试关键可拆分时,拆分所述待测试关键字,并使所述匹配单元将拆分后的待测试关键字与数组进行匹配。
5.根据权利要求3所述的一种快速查询黑白名单的系统,其特征在于,所述数组创建单元和匹配单元对关键字所作运算为哈希运算,所述运算值为哈希值,所述数组生成单元生成的数组中位的数量不小于黑白名单中关键字数量的2倍。
6.一种快速查询黑白名单的方法,其特征在于,包括以下步骤(a)将黑白名单中的所有关键字分别作运算后根据运算值生成数组;(b)将待测试的关键字作运算,并将所述待测试的关键字的运算值与所述数组进行比对,若待测试的关键字的运算值与所述数组匹配,则执行步骤(c);(c)查询黑白名单,并判断所述待测试的关键字是否存在于黑白名单中,若所述待测试的关键字存在于黑白名单中,则执行步骤(d);(d)根据黑白名单策略对初始关键字进行操作。
7.根据权利要求6所述的一种快速查询黑白名单的方法,其特征在于,所述步骤(a)进一步包括(a1)生成数组,并将该数组中的所有位设置为0;(a2)依次将黑白名单中的每一关键字作运算;(a3)将得到的每一运算值的多个字节分为多组数值;(a4)将所述数组中与步骤(a3)中的多组值对应的位分别设置为1。所述步骤(b)进一步包括(b1)将待测试的关键字作运算;(b2)将待测试的关键字的运算值的多个字节分为多组数值;(b3)分别查询并判断所述数组中与步骤(b2)中多组值对应的位是否为1,若所述数组中所有对应的位都为1,则确定待测试的关键字的运算值与所述数组匹配,执行步骤(c)。
8.根据权利要求7所述的一种快速查询黑白名单的方法,其特征在于,所述步骤(b3)进一步包括(b31)若所述数组中对应的位中包括0,则判断所述待测试关键是否可以拆分,若可以拆分,则执行步骤(b32);否则确定初始待测试关键字不在黑白名单中,并执行步骤(d);(b32)拆分所述待测试关键字,并将拆分获得的关键字作为待测试关键字,返回步骤(b1)。
9.根据权利要求6或7所述的一种快速查询黑白名单的方法,其特征在于,所述步骤(a)和步骤(b)中的运算为哈希运算,所述运算值为哈希值,所述步骤(a1)中的数组大小为8K字节,所述步骤(a3)及所述步骤(b2)中,所述哈希值的每两个字节组成一组,共分为8组。
10.根据权利要求6所述的一种快速查询黑白名单的方法,其特征在于,所述步骤(c)中进一步包括(c1)若所述待测试关键字不存在于黑白名单中,判断所述待测试关键是否可以拆分,若可以拆分,则执行步骤(c2);否则确定初始待测试关键字不在黑白名单中,并执行步骤(d);(c2)拆分所述待测试关键字,并将拆分获得的关键字作为待测试关键字,返回步骤(b)。
全文摘要
本发明公开了一种快速查询黑白名单的系统,包括用于查询黑白名单中是否包括待检测关键字的查询单元,还包括数组创建单元,用于将黑白名单中的所有关键字分别作运算后根据运算值生成数组;数组存储单元,用于存储所述数组创建单元创建的数组;匹配单元,用于将待测试的关键字作运算后将所述待测试的关键字的运算值与所述数组存储单元中的数组进行比对,并在待测试的关键字的运算值与所述数组匹配时,使查询单元查询黑白名单中是否存在待测试的关键字。本发明还提供一种对应的方法。本发明通过待测试关键字的哈希值比对后再查询黑白名单,减少了查询过程中对数据库中黑白名单的访问,实现了快速判定待测试关键字的黑白名单状态。
文档编号G06F17/30GK101079042SQ20061006455
公开日2007年11月28日 申请日期2006年12月28日 优先权日2006年12月28日
发明者邓君 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1