一种多模式正则表达式匹配方法及装置的制造方法
【技术领域】
[0001] 本申请涉及网络安全技术领域,特别涉及多模式正则表达式匹配方法及装置。
【背景技术】
[0002] 正则表达式是一种描述字符串的表达形式,具备自由且准确的表述能力,在网络 安全领域有着广泛的应用,常被用来描述具有攻击意图的网络数据。在入侵检测系统中,通 常会包含描述大量攻击特征的正则表达式集合。在检测过程中,采用多模式正则表达式匹 配的方式将正则表达式集合与网络数据流进行匹配,以从中发现攻击行为。而随着互联网 发展,网络服务增多,网络环境日益复杂,数据流量带宽也在不断增加,多模式正则表达式 匹配在容纳更多更复杂的正则表达式的同时也要求用更少的存储空间进行更快的匹配。
[0003] 传统的多模式正则表达式匹配方法有三类:第一类方法是非确定有限自动机NFA 匹配,具有存储空间少的优点,但存在不确定数量的激活状态,匹配速度通常较慢的问题; 第二类方法是确定有限自动机DFA匹配,具有匹配速度快的优点,但对于大规模或是特殊 写法的复杂正则表达式,可能会产生状态爆炸,从而使自动机构造时间过长,甚至内存耗尽 无法构造的问题;第三类方法是先使用精确串多模式匹配或者扩展自动机匹配进行预过滤 匹配,当预过滤匹配命中时,就预示附近区域有可能存在成功匹配,这时再用NFA或者DFA 进行确认,相比前两类方法,第三类方法更易于实现其可扩展性较好。因此,目前常采用第 三类方法,也称为预过滤匹配方法,该方法具体包括:
[0004] 对待匹配的数据流进行字符串过滤,当数据流中的关键字与预设的特征字具有至 少一个相同特征时,表明数据流通过字符串过滤;将通过字符串过滤的数据流进行正则表 达式匹配。由于该方法中的字符串是直接从正则表达式中提取的,字符串的长度和数量均 无法保证过滤的质量,例如当所有正则表达式中一条或多条正则表达式所提取的均是短字 符串或不具区分度的字符串时,则该方法的过滤效果不佳,导致进入正则表达式匹配的数 据量巨大,严重影响整个匹配性能。
【发明内容】
[0005] 本发明所要解决的技术问题是提供多模式正则表达式匹配方法,通过两层过滤方 式提高过滤速率和过滤效果,进而以保证匹配性能的稳定性。
[0006] 本发明还提供了多模式正则表达式匹配装置,用以保证上述方法在实际中的实现 及应用。
[0007] -方面,本发明提供了多模式正则表达式匹配方法,该方法包括:
[0008] 按照预先建立的第一层过滤特征集对待匹配数据进行过滤得到第一层过滤的数 据分片和命中的精确字符串;所述第一层过滤特征集包括:从每个正则表达式提取的一个 长度超过预设阈值的精确字符串;
[0009] 根据所述命中的精确字符串查找对应的正则表达式超集,按照所述正则表达式超 集对所述第一层过滤的数据分片进行第二层过滤得到第二层过滤的数据分片和命中的正 则表达式超集;所述正则表达式超集是根据正则表达式的精确字符串和模糊字符串的逻辑 关系组成的表达式;
[0010] 根据所述命中的正则表达式超集确定对应的正则表达式,利用所述正则表达式对 所述第二层过滤的数据分片作匹配。
[0011] 优选的,所述第一层过滤特征集通过以下方式建立:
[0012] 对每个正则表达式进行分割得到对应的精确字符串和模糊字符串;
[0013] 从每个正则表达式对应的精确字符串中选择长度超过预设阈值的精确字符串,将 选择的精确字符串组合成备选字符串集;
[0014] 按照精确字符串的优先级顺序从所述备选字符串集中针对每个正则表达式选择 一个精确字符串组合成第一层过滤特征集。
[0015] 优选的,在所述对每个正则表达式进行分割得到对应的精确字符串和模糊字符串 之后,所述方法还包括:
[0016] 将所述模糊字符串进行确定化,并与相邻的精确字符串分片合并。
[0017] 优选的,所述按照精确字符串的优先级顺序从所述备选字符串集中针对每个正则 表达式选择一个精确字符串组合成第一过滤特征集,包括:
[0018] 按照字符串长度大小关系来设置所述备选字符串集中每个正则表达式对应的精 确字符串的优先级顺序,且该优先级顺序在使用过程中根据第一层过滤和第二层过滤的结 果进彳丁调整;从每个正则表达式对应的精确字符串中选择优先级最尚的精确字符串以组合 成第一层过滤特征集。
[0019] 优选的,所述正则表达式超集通过以下方式生成:
[0020] 用于对正则表达式进行分割得到精确字符串和模糊字符串,采用逻辑关系符号替 代所述模糊字符串,根据所述精确字符串和所述逻辑关系符号生成正则表达式超集;所述 逻辑关系符号用于表征所述模糊字符串与其相邻的精确字符串之间的逻辑关系。
[0021] 又一方面,本发明提供了一种多模式正则表达式匹配装置,该装置包括:
[0022] 第一层过滤单元,用于按照预先建立的第一层过滤特征集对待匹配数据进行过滤 得到第一层过滤的数据分片和命中的精确字符串;所述第一层过滤特征集包括:从每个正 则表达式提取的一个长度超过预设阈值的精确字符串;
[0023] 第二层过滤单元,用于根据所述命中的精确字符串查找对应的正则表达式超集, 按照所述正则表达式超集对所述第一层过滤的数据分片进行第二层过滤得到第二层过滤 的数据分片和命中的正则表达式超集;所述正则表达式超集是根据正则表达式的精确字符 串和模糊字符串的逻辑关系组成的表达式;
[0024] 匹配单元,用于根据所述命中的正则表达式超集确定对应的正则表达式,利用所 述正则表达式对所述第二层过滤的数据分片作匹配。
[0025] 优选的,所述装置还包括:
[0026] 第一层过滤特征集生成单元,用于生成所述第一层过滤特征集;
[0027] 所述第一层过滤特征集生成单元,包括:
[0028] 字符串分割子单元,用于对每个正则表达式进行分割得到对应的精确字符串和模 糊字符串;
[0029] 备选字符串集生成子单元,用于从每个正则表达式对应的精确字符串中选择长度 超过预设阈值的精确字符串,将选择的精确字符串组合成备选字符串集;
[0030] 第一过滤特征集生成子单元,用于按照精确字符串的优先级顺序从所述备选字符 串集中针对每个正则表达式选择一个精确字符串组合成第一层过滤特征集。
[0031] 优选的,所述第一过滤特征集生成单元还包括:
[0032] 确定化子单元,用于将所述模糊字符串进行确定化,并与相邻的精确字符串分片 合并。
[0033] 优选的,所述第一层过滤特征集生成子单元具体用于:
[0034] 按照字符串长度大小关系来设置所述备选字符串集中每个正则表达式对应的精 确字符串的优先级顺序,且该优先级顺序在使用过程中根据第一层过滤和第二层过滤的结 果进彳丁调整;从每个正则表达式对应的精确字符串中选择优先级最尚的精确字符串以组合 成第一层过滤特征集。
[0035] 优选的,所述装置还包括:
[0036] 正则表达式超集生成单元,用于对正则表达式进行分割得到精确字符串和模糊字 符串,采用逻辑关系符号替代所述模糊字符串,根据所述精确字符串和所述逻辑关系符号 生成正则表达式超集;所述逻辑关系符号用于表征所述模糊字符串与其相邻的精确字符串 之间的逻辑关系。
[0037] 与现有技术相比,本发明具有如下有益效果:
[0038] 本发明提出了通过两层过滤的方式来提高过滤效果,具体的是按照预先建立的第 一层过滤特征集对待匹配数据进行过滤得到第一层过滤的数据分片和命中的精确字符串; 所述第一层过滤特征集包括:从每个正则表达式提取的一个长度超过预设阈值的精确字符 串;这里的第一层过滤是根据字符串数量越少越好,字符串长度越长越好的特点选定的第 一过滤特征集,只从每个正则表达式中选择一个字符串;有别于现有技术中的精确串,从而 使得第一层过滤能起到降低纯净数据通过率的作用,主要起到"过滤速度最大化"的作用。
[0039] 在第一层过滤完成时,接着进行第二层过滤
,具体是根据所述命中的精确字符串 查找对应的正则表达式超集,按照所述正则表达式超集对所述第一层过滤的数据分片进行 第二层过滤得到第二层过滤的数据分片和命中的正则表达式超集;所述正则表达式超集是 根据正则表达式的精确字符串和模糊字符串的逻辑关系组成的表达式;由于第二层过滤采 用的是正则表达式超集,其描述能力已经十分接近原始的正则表达式,能够做到尽可能排 除不匹配的数据,以过滤出最接近原始正则表达式的数据分片,避免大量的浑浊数据进入 到最后的正则表达式匹配阶段,第二层过滤主要起到过滤效果最大化的作用,并以间接提 高匹配效率,同时将多模式匹配分解到不同场景(不同数据分片)上的单模匹配,进而避免 了 DFA空间膨胀或NFA匹配速度过慢的问题。最后,对第二层过滤得到的数据分片,利用其 对应的正则表达式作单条匹配。因此,本发明的技术方案通过两层过滤方式提高过滤速率 和过滤效果,进而以保证匹配性能的稳定性,在保证攻击性数据被过滤的情况下,尽可能避 免纯净数据的通过。
【附图说明】
[0040] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于 本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其 他的附图。
[0041] 图1是本发明的多模式正则表达式匹配方法实施例的流程图;
[0042] 图2是本发明提供的第一层过滤特征集的生成方法的流程图;
[0043] 图3是本发明的多模式正则表达式匹配装置实施例的结构图。
【具体实施方式】
[0044] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于 本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本申请保护的范围。
[0045] 本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务 器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备 的分布式计算环境等等。
[0046] 本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序 模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组 件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由 通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以 位于包括存储设备在内的本地和远程计算机存储介质中。
[0047] 参考图1,图1是本发明的多模式正则表达式匹配方法实施例的流程图,该方法可 以包括:
[0048] S101,按照预先建立的第一层过滤特征集对待匹配数据进行过滤得到第一层过滤 的数据分片和命中的精确字符串;所述第一层过滤特征集包括:从每个正则表达式提取的 一个长度超过预设阈值的精确字符串。
[0049] 这里的第一层过滤特征集在实现匹配方法之前应预先生成,该第一层过滤特征集 针对每个正则表达式仅包含一个精确字符串,且该精确字符串必须满足长度超过预设阈值 的条件。
[0050] 针对如何生成第一层过滤特征集,本发明还提出了具体的实现方法,参见图2,图 2是本发明提供的第一层过滤特征集的生成方法的流程图,该方法包括:
[0051] S201,对每个正则表达式进行分割得到对应的精确字符串和模糊字符串。
[0052] 这里需要说明的是,正则表达式根据语法不同其表达形式可能不同,一般情况下 包含:字母、数字、引用符号或特殊语法符号等元素;按照一定的分割条件,均可将一个正 则表达式分割成两种类型的字符串,这两种类型字符串分别称为:精确字符串和模糊字符 串,分割得到的这两种类型字符串的个数不定。
[0053] 发明人考虑到在实现过程中精确字符串长度越长,第一层过滤的效率越高的特 点,进一步提出了一种实现方式,以在不缩小语义覆盖范围的情况下,尽可能地将精确字符 串长度最大化,具体实现方式是在上述S201之后,增加如下步骤:
[0054] 将所述模糊字符串进行确定化,并与相邻的精确字符串分片合并。然后再进行后 续步骤,且后续步骤均是对合并后的精确字符串进行相应的处理。
[0055] 在完成S201之后,接着进行S202和S203。
[0056] S202,从每个正则表达式对应的精确字符串中选择长度超过预设阈值的精确字符 串,将选择的精确字符串组合成备选字符串集。
[0057] S203,按照精确字符串的优先级顺序从所述备选字符串集中针对每个正则表达式 选择一个精确字符串组合成第一层过滤特征集。
[0058] 在具体实现时,S203可以是按照精确字符串长度由大到小的顺序来设置优先级由 尚到低的顺序,然后针对每个正则表达式选择对应的优先级最尚的精确字符串(长度最长 的精确字符串),以组合生成第一层过滤特征集。
[0059] 为了进一步保障第一层过滤效果,发明人还提出了结合实际过滤结果来适应性调 整第一层过滤特征集,具体实现方式为:
[0060] 按照字符串长度大小关系来设置所述备选字符串集中每个正则表达式对应的精 确字符串的优先级顺序,且该优先级顺序在使用过程中根据第一层过滤和第二层过滤的结 果进彳丁调整;从每个正则表达式对应的精确字符串中选择优先级最尚的精确字符串以组合 成第一层过滤特征集。
[0061] 上述实现方式可以理解为,在初始阶段,第一层过滤特征集是直接选择每个正则 表达式对应的优先级最高的精确字符串(长度最长的精确字符串);在后期阶段,根据第一 层过滤和第二层过滤的结果来对优先级顺序进行适应性调整,如果精确字符串在第一层过 滤时发送命中,但在第二层过滤时未发生命中,此时,将该精确字符串的优先级降至最低, 并将备选字符串集中与其顺序相邻的精确字符串的优先级更新为最高级。在整个匹配过程 中,采用上述轮询方式,尽可能地让具有较高区分程度的精确字符串长时间地作为第一层 过滤特征集的元素,以保证第一层过滤的实际效果最佳。
[0062] 在具体实现时,可以按照上述优先级顺序的设置方式动态调整备选字符串集合中 的精确字符串的优先级高低顺序,从而动态调整第一层过滤特征集,以使其根据实际过滤 情况进行动态变化,以满足第一层过滤需求。
[0063] 为了更好的理解上述步骤S101,下面以具体场景为例对其作进一步解释说明。
[0064] 在攻击检测应用领域里,一般情况下采用的正则表达式具有明显区分度的特征; 本发明正是充分利用正则表达式所描述的数据与普通正常数据的差异,来实现较好的过滤 功能,以大幅度提尚检测效率。
[0065] 上述第一层过滤的本质是为了匹配每个正则表达式中最具有明显区分度的精确 字符串,以保证"纯净"数据无须进入后续的深入检测过程,也为后续的步骤提供较为精确、 数据量较小的"浑浊"数据。一般情况下,大量的网络数据均是"纯净"数据,那么经过第一 层过滤后,这些"纯净"数据不会再进入后续的第二层过滤及匹配处理,极大地简化了后续 处理。这里的"纯净"数据是指非可疑的网络数据,而"浑浊"数据是指可疑的网络数据。
[0066] 经过第一层过滤可能过滤得到一个数据分片以及被命中的一个精确字符串,也可 能得到多个数据分片以及多个被命中的精确字符串,还有可能是没有过滤到数据分片,没 有精确字符串被命中;在没有过滤到数据分片的情况下,说明待匹配的数据不符合匹配规 贝1J,认为待匹配的数据均是纯净数据,则无需进行后续各个步骤,直接结束此次匹配过程。
[0067] 当第一层过滤出数据分片时,进入后续的S102和S103。
[0068] 接着描述本实施例的实现步骤S102和S103。
[0069] S102,根据所述命中的精确字符串查找对应的正则表达式超集,按照所述正则表 达式超集对所述第一层过滤的数据分片进行第二层过滤得到第二层过滤的数据分片和命 中的正则表达式超集;所述正则
表达式超集是根据正则表达式的精确字符串和模糊字符串 的逻辑关系组成的表达式。
[0070] 这里的正则表达式超集是在实现第二层匹配之前应预先生成的,每个正则表达式 对应有一个正则表达式超集,针对如何生成正则表达式超集,本发明还提出了具体的实现 方法,该方法包括:
[0071] 对正则表达式进行分割得到精确字符串和模糊字符串,采用逻辑关系符号替代所 述模糊字符串,根据所述精确字符串和所述逻辑关系符号生成正则表达式超集;所述逻辑 关系符号用于表征所述模糊字符串与其相邻的精确字符串之间的逻辑关系。
[0072] 这里需要说明的是,超集是从数据集合的概念上理解的,一个数据集合的超集必 然包含这个数据集合的所有元素,以及各个元素的逻辑关系。正则表达式超集所涵盖的元 素范围远大于该正则表达式所涵盖的元素范围。从该生成方法可以看出,利用逻辑关系符 号替代了模糊字符串,由于逻辑关系符号所涵盖的元素范围远大于模糊字符串所涵盖的范 围,因此使得建立的超集的范围远大于正则表达式的范围。由于正则表达式字符串间具有 一定的顺序关系,具有一定的数据长度,为了建立一个范围较合适的超集,这里的逻辑关系 符号可以是顺序与、与、或、长度判定符号等形式。
[0073] 第二层过滤的本质是词匹配过程和语义匹配过程。所谓词匹配过程是指与正则表 达式超集里的精确字符串进行匹配;所述语义匹配过程是指根据词匹配结果决定用哪个超 集语法树进行匹配,遍历语法树,当语法树被命中时,表明该数据分片通过第二层过滤,视 为正则表达式超集命中。这里的语法树实质是正则表达式超集的另一种展示形式,语法树 是以超集中的精确字符串作为终端节点,以超集中的逻辑关系符号作为非终端节点。
[0074] 为了更好的理解上述步骤S102,下面以具体场景为例对其作进一步解释说明。
[0075] 在攻击检测应用领域里,在上述第一层过滤之后再进行第二层过滤主要是为了避 免出现大量复杂网络环境中的"浑浊"数据,阻塞到最后的正则表达式匹配环节,因此,第二 层过滤主要筛选不能发生命中的数据,直接将这些数据分流以减少正则表达式匹配的数据 量,以避免出现DFA的空间膨胀问题或者NFA匹配速度慢的问题。
[0076] 在完成第二层过滤,且过滤到一些数据分片时,就进入S103以对数据分片进行最 终匹配确认。
[0077] S103,根据所述命中的正则表达式超集确定对应的正则表达式,利用所述正则表 达式对所述第二层过滤的数据分片作匹配。
[0078] 由于待匹配数据中的大部分数据是"纯净"数据,因此在第一层过滤和第二层过滤 处理时,已经将大部分数据分流掉,进入到最后环节的数据非常少,又因为在第二层过滤时 已经可以确定数据分片与哪个正则表达式最可能匹配,因此,将多模式匹配分解到不同的 场景的单模匹配(数据分片对应的单模匹配),基于此,S103具体实现时,可以采用非确定 有限自动机(NFA)方法实现匹配,也可以采用确定有限自动机(DFA)的方式实现匹配。
[0079] 另外,发明人在上述两层过滤的基础上,还提出了步骤S103可以仅对正则表达式 模糊字符串部分进行构建就可以完成最终的匹配。主要是因为在第一层过滤和第二层过滤 时已经确定了数据分片精确字符串相匹配,因此,在最后一个环节也可以仅对模糊字符串 部分进行匹配。
[0080] 基于上述描述,上述S103在具体实现时,可以有以下两种实现方式:
[0081] 第(1)种方式:通过构造非确定有限自动机或确定有限自动机表述所述命中的正 则表达式超集对应的正则表达式中的模糊字符串,利用构造的非确定有限自动机或确定有 限自动机对第二层过滤的数据分片进行匹配。
[0082] 第(2)种方式:通过构造非确定有限自动机或确定有限自动机表述所述命中的正 则表达式超集对应的正则表达式,利用构造的非确定有限自动机或确定有限自动机对第二 层过滤的数据分片进行匹配。
[0083] 上文描述的以图2示例的第一过滤特征集的生成方法,下面通过具体示例对其 S201的实现过程作进一步解释说明,主要是以PCRE正则表达式语法为例来进行举例说明。
[0084] 对正则表达式进行分割,主要是以模糊因子作为分隔符,将正则表达式分割成精 确字符串和模糊字符串。正则表达式的模糊因子是指不能确定地表示一个ASCII字符的符 号及其组合。
[0085] 根据PCRE语法(正则表达式语法)的语法特征,可以定义如下模糊因子:
[0086] (1)元字符
[0087] (2)分支符:" | "。
[0088] (3)分组符:。
[0089] (4)后缀符或词组:" + "," " {m,n},{m,},{,n},{m}。
[0090] (5)字符词组,例如[a-z],[ ' 0 - 9],[ [:alpha:]]等。
[0091] (6)引用符号,例如正则表达式来描述为(\\[DdSsWwBbeZAabtnvfrO- 9]) | (\\[Pp]((\{[a-zA-Z- ] * \}) |([a-zA-Z])) ?),则 \d,\f,\n,\pF,\p{N ame}为引用符号。
[0092] (7)惰性匹配和修改匹配模式的高级语法符号,例如" " {m, n} ? ","\Q- \E',,''( ?i) ",''( ? 一i) ?s) ",''( ? 一s) ?m) ",''( ? 一m) ', 等。
[0093] 在具体实现时,模糊因子也可以是以上各种形式的组合形式。
[0094] 其次,定义模糊判定条件:
[0095] (a)对于后缀符或词组,与其语法前缀合并成一个模糊字符串,例如正则表达式 abc+d可分割得到模糊字符串c+ ;
[0096] (b)对于分支符号,若与分组符结合使用,则将分组内所有分支作为一个模糊字符 串,否则不分割;
[0097] (c)其余模糊因子作为分隔符,自身作为一个模糊字符串。
[0098] (d)所有被模糊子串分开的字符串,作为精确串字符串。
[0099] 最后,通过定义的模糊判定条件,扫描正则表达式,将其分割成顺序的精确字符串 和模糊字符串,并保留字符串之间的位置关系。
[0100] 下面举例说明:
[0101] 例1 :正则表达式
[0102] "(20[01] [\\x09 - \\x0d-~]*(AUTHINFOUSER|news)finger" 可 分割成"20,[01][\\x09 - \\x0d-~]*(AUTHINFOUSER|news),finger" 的 3个字符串。第一个"20"和最后一个"finger"均为精确字符串,中间的" [01] [\\x09 - \\x0d-~]*(AUTHINFOUSER|news)" 为模糊字符串。
[0103] 在分割之后,也可以再进一步对模糊字符串进行确定化处理,接下来通过举例方 式对模糊字符串的确定化过程进行解释说明。
[0104] 确定化方法是针对一些特定构成的模糊字符串作进一步确定化,实施原则是:操 作简单,不缩小语义覆盖范围,相邻精确字符串合并,分割的字符串数量可控。例如,可以分 步实施:
[0105] (1)对于包含后缀符或词组的模糊字符串,将其确定化为携带精确字符的字符串, 例如将 "a{m,n},a{m},a{m,} " 确定化为 "a"*a{0,n-m},a…a{0},a…a* " 其中"…" 表示a展开m次,;将确定化之后的精确字符与相邻的分割得到的精确字符串合并。
[0106] 例2 :正则表达式"abc{3,10}de"分割成"&13,〇{3,10},(16",经过模糊字符串确定 化将c{3,10}确定化为cccc{0, 7},则将其与左边相邻的精确字符串"ab"合并得到"abccc, c{0,7},de"。
[0107] 再例如,将"a+"确定化为"aa*",将确定化之后的精确字符与相邻的分割得到的 精确字符串合并。
[0108] 例3 :正则表达式"abc+
de"分割成"ab,c+,de",将其中的模糊字符串"c+"确定 化为"cc* ",再按照分割后的字符串位置关系,将其与相邻的精确字符串"ab"进行合并, 得到 "abc,c*,de" ;
[0109] 例4 :正则表达式"ab(cd)+de"分割成"ab,(cd)+,de",将其中的模糊字符串 "(0(1)+"确定化为(0(1)(0(1)*,最后进行合并得到"313,(0(1),(0(1)*,(16"。
[0110] (2)对于包含分组符的模糊字符串,若内部不包含分支符"I"和后缀符或词组,可 以直接删除分组符,并尽量与相邻精确字符串进行合并,这种情况下,上述例4可以进一步 确定化为"abed,(cd) *,de"。
[0111] (3)对于包含分支符的模糊字符串,则尝试提取公共前缀和后缀字符串,并尽量与 相邻精确字符串进行合并。
[0112] 例 5 :正则表达式 "x(abcde|abcfe)y" 分割成 "x,(abcde|abcfe),y" 后确定化为 "xabc,(d|f),ey"。
[0113] 若无公共前缀和后缀字符串,但分支数量较少,且每个分支都具有较长的精确字 符串,可以对模糊字符串进行分支展开。
[0114] 例如:对上述例1进行分支展开后确定化为"20,[01] [\\x09 - \\x0d-~]*,AUTHINFOUSER,finger" 或 "20,[01][\\x09 -\\x0d-~]*,news,finger"〇
[0115] 通过上述几种确定化的具体实现方式,可以对一些模糊字符串作进一步确定化, 以达到扩展精确字符串长度的目的。
[0116] 另外,关于上文描述的正则表达式超集的生成方法,下面以PCRE语法正则表达式 为例,来描述如何生成正则表达式超集。
[0117] 如上文描述的正则表达式超集的生成方法包括:对正则表达式进行分割得到精确 字符串和模糊字符串,采用逻辑关系符号替代所述模糊字符串,根据所述精确字符串和所 述逻辑关系符号生成正则表达式超集;所述逻辑关系符号用于表征所述模糊字符串与其相 邻的精确字符串之间的逻辑关系。
[0118] 该方法涉及到的分割部分可以参见上文对S201的相应描述部分,在得到精确字 符串和模糊字符串之后,也可以进一步地对模糊字符串作确定化处理,删除未能确定化的 模糊字符串,并记录该模糊字符串的数据长度范围。然后将,根据字符串间的原始位置关系 和逻辑关系重新组合成新的表达式,这个新的表达式描述的数据集合就是原正则表达式的 超集,在本发明中称之为正则表达式超集,一个正则表达式对应一个超集。
[0119] 正则表达式超集允许匹配成功的数据更广泛,并且排除了原正则表达式中空间复 杂度和时间复杂度都相对更高的模糊因子多模式匹配部分,具有更高的匹配效率,因而可 以提高第二层过滤的性能。
[0120] 在实际应用中可以针对不同语法的正则表达式,结合正则表达式的特点来生成对 应的超集,可以针对常见的模糊字符串形式定义相应的逻辑符号或判定符号,一般来说,至 少要包含:顺序与、与、或,长度判定符号等逻辑关系符号。
[0121] 下面给出一种示例:
[0122] (1)字符串间的"顺序与"关系用"表示,例6 :正则表达式abc. *def的表达 式超集为"abc" "def",表达先匹配字符串"abc"再匹配"def"。
[0123] (2)字符串间的"或"关系用"|"表示。
[0124] 例如:之前例 1 的表达式超集为 "20". ?"AUTHINFOUSER". ? "finger" 或"20". ? "news". ? "finger",引入或符号后进一步表示为:("20". ?"AUTHINFO USER"., "finger")| ("20".? "news".? "finger")。
[0125] (3)字符串间的"与"关系用"&"表示。
[0126] 优选的,("A". ? "B")| ( "B". ? "A")可以优化为"A"& "B",例7 :正则表达式 "abc. *def"| "def". *"abc" 的表达式超集为"abc"&"def"。
[0127] (4)和一般的表达式一样,字符串通过()来提升优先级别。或者在无需提升优先 级的情况下,用来明确字符串分组。比如结合长度判定符号使用。长度判定符号包括:>, 〉=,〈,〈 =,==。
[0128] 例8 :正则表达式"abc{3}def"的表达式超集为("abc".. "def")== 8,表达 先匹配"abc"再匹配"def"且匹配区域大小是8。
[0129] 总结以上例子如下表所示:
[0130]
[0132] 上文描述了本发明提供的多模式正则表达式匹配方法,下面对本发明提供的多模 式正则表达式匹配装置进行解释说明。
[0133] 参考图3,图3是本发明的多模式正则表达式匹配装置实施例的结构图,该装置可 以包括:
[0134] 第一层过滤单元301,用于按照预先建立的第一层过滤特征集对待匹配数据进行 过滤得到第一层过滤的数据分片和命中的精确字符串;所述第一层过滤特征集包括:从每 个正则表达式提取的一个长度超过预设阈值的精确字符串;
[0135] 第二层过滤单元302,用于根据所述命中的精确字符串查找对应的正则表达式超 集,按照所述正则表达式超集对所述第一层过滤的数据分片进行第二层过滤得到第二层过 滤的数据分片和命中的正则表达式超集;所述正则表达式超集是根据正则表达式的精确字 符串和模糊字符串的逻辑关系组成的表达式;
[0136] 匹配单元303,用于根据所述命中的正则表达式超集确定对应的正则表达式,利用 所述正则表达式对所述第二层过滤的数据分片作匹配。
[0137] 优选的,所述装置还包括:
[0138] 第一层过滤特征集生成单元,用于生成所述第一层过滤特征集;
[0139] 所述第一层过滤特征集生成单元,包括:
[0140] 字符串分割子单元,用于对每个正则表达式进行分割得到对应的精确字符串和模 糊字符串;
[0141] 备选字符串集生成子单元,用于从每个正则表达式对应的精确字符串中选择长度 超过预设阈值的精确字符串,将选择的精确字符串组合成备选字符串集;
[0142] 第一过滤特征集生成子单元,用于按照精确字符串的优先级顺序从所述备选字符 串集中针对每个正则表达式选择一个精确字符串组合成第一层过滤特征集。
[0143] 优选的,所述第一过滤特征集生成单元还包括:
[0144] 确定化子单元,用于将所述模糊字符串进行确定化,并与相邻的精确字符串分片 合并。
[0145] 优选的,所述第一层过滤特征集生成子单元具体用于:
[0146] 按照字符串长度大小关系来设置所述备选字符串集中每个正则表达式对应的精 确字符串的优先级顺序,且该优先级顺序在使用过程中根据第一层过滤和第二层过滤的结 果进彳丁调整;从每个正则表达式对应的精确字符串中选择优先级最尚的精确字符串以组合 成第一层过滤特征集。
[0147] 优选的,所述装置还包括:
[0148] 正则表达式超集生成单元,用于对正则表达式进行分割得到精确字符串和模糊字 符串,采用逻辑关系符号替代所述模糊字符串,根据所述精确字符串和所述逻辑关系符号 生成正则表达式超集;所述逻辑关系符号用于表征所述模糊字符串与其相邻的精确字符串 之间的逻辑关系。
[0149] 本发明提出了通过两层过滤的方式来提高过滤效果,具体的是按照预先建立的第 一层过滤特征集对待匹配数据进行过滤得到第一层过滤的数据分片和命中的精确字符串; 所述第一层过滤特征集包括:从每个正则表达式提取的一个长度超过预设阈值的精确字符 串;这里的第一层过滤特征集保护的精确字符串是按照长度大小提取的,有别于现有技术 中的精确串,从而使得第一层过滤能起到降低纯净数据通过率的作用,由于第一层过滤特 征集里的精确字符串具有每个
正则表达式只选一个精确字符串来参与的特点,能够保证过 滤速率。
[0150] 在第一层过滤完成时,接着进行第二层过滤,具体是根据所述命中的精确字符串 查找对应的正则表达式超集,按照所述正则表达式超集对所述第一层过滤的数据分片进行 第二层过滤得到第二层过滤的数据分片和命中的正则表达式超集;所述正则表达式超集是 根据正则表达式的精确字符串和模糊字符串的逻辑关系组成的表达式;由于第二层过滤采 用的是正则表达式超集,其描述能力已经十分接近原始的正则表达式,能够做到尽可能排 除不匹配的数据,以过滤出最接近原始正则表达式的数据分片,避免大量的"浑浊"数据进 入到最后的正则表达式匹配阶段,以间接提高匹配效率,同时将多模式匹配分解到不同场 景(不同数据分片)上的单模匹配,进而避免了DFA空间膨胀或NFA匹配速度过慢的问题。 最后,对第二层过滤得到的数据分片,利用其对应的正则表达式作单条匹配。因此,本发明 的技术方案通过两层过滤方式提高过滤速率和过滤效果,进而以保证匹配性能的稳定性, 在保证攻击性数据被过滤的情况下,尽可能避免纯净数据的通过。
[0151] 需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重 点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。 对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参 见方法实施例的部分说明即可。
[0152] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将 一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作 之间存在任何这种实际的关系或者顺序。而且,术语"包括"、"包含"或者其任何其他变体 意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括 那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或 者设备所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并 不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0153] 以上对本申请所提供的多模式正则表达式匹配方法及装置进行了详细介绍,本文 中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮 助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思 想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对 本申请的限制。
【主权项】
1. 一种多模式正则表达式匹配方法,其特征在于,该方法包括: 按照预先建立的第一层过滤特征集对待匹配数据进行过滤得到第一层过滤的数据分 片和命中的精确字符串;所述第一层过滤特征集包括:从每个正则表达式提取的一个长度 超过预设阈值的精确字符串; 根据所述命中的精确字符串查找对应的正则表达式超集,按照所述正则表达式超集对 所述第一层过滤的数据分片进行第二层过滤得到第二层过滤的数据分片和命中的正则表 达式超集;所述正则表达式超集是根据正则表达式的精确字符串和模糊字符串的逻辑关系 组成的表达式; 根据所述命中的正则表达式超集确定对应的正则表达式,利用所述正则表达式对所述 第二层过滤的数据分片作匹配。2. 根据权利要求1所述的方法,其特征在于,所述第一层过滤特征集通过以下方式建 立: 对每个正则表达式进行分割得到对应的精确字符串和模糊字符串; 从每个正则表达式对应的精确字符串中选择长度超过预设阈值的精确字符串,将选择 的精确字符串组合成备选字符串集; 按照精确字符串的优先级顺序从所述备选字符串集中针对每个正则表达式选择一个 精确字符串组合成第一层过滤特征集。3. 根据权利要求2所述的方法,其特征在于,在所述对每个正则表达式进行分割得到 对应的精确字符串和模糊字符串之后,所述方法还包括: 将所述模糊字符串进行确定化,并与相邻的精确字符串分片合并。4. 根据权利要求2或3所述的方法,其特征在于,所述按照精确字符串的优先级顺序从 所述备选字符串集中针对每个正则表达式选择一个精确字符串组合成第一过滤特征集,包 括: 按照字符串长度大小关系来设置所述备选字符串集中每个正则表达式对应的精确字 符串的优先级顺序,且该优先级顺序在使用过程中根据第一层过滤和第二层过滤的结果进 行调整;从每个正则表达式对应的精确字符串中选择优先级最高的精确字符串以组合成第 一层过滤特征集。5. 根据权利要求1所述的方法,其特征在于,所述正则表达式超集通过以下方式生成: 对正则表达式进行分割得到精确字符串和模糊字符串,采用逻辑关系符号替代所述模 糊字符串,根据所述精确字符串和所述逻辑关系符号生成正则表达式超集;所述逻辑关系 符号用于表征所述模糊字符串与其相邻的精确字符串之间的逻辑关系。6. -种多模式正则表达式匹配装置,其特征在于,该装置包括: 第一层过滤单元,用于按照预先建立的第一层过滤特征集对待匹配数据进行过滤得到 第一层过滤的数据分片和命中的精确字符串;所述第一层过滤特征集包括:从每个正则表 达式提取的一个长度超过预设阈值的精确字符串; 第二层过滤单元,用于根据所述命中的精确字符串查找对应的正则表达式超集,按照 所述正则表达式超集对所述第一层过滤的数据分片进行第二层过滤得到第二层过滤的数 据分片和命中的正则表达式超集;所述正则表达式超集是根据正则表达式的精确字符串和 模糊字符串的逻辑关系组成的表达式; 匹配单元,用于根据所述命中的正则表达式超集确定对应的正则表达式,利用所述正 则表达式对所述第二层过滤的数据分片作匹配。7. 根据权利要求6所述的装置,其特征在于,所述装置还包括: 第一层过滤特征集生成单元,用于生成所述第一层过滤特征集; 所述第一层过滤特征集生成单元,包括: 字符串分割子单元,用于对每个正则表达式进行分割得到对应的精确字符串和模糊字 符串; 备选字符串集生成子单元,用于从每个正则表达式对应的精确字符串中选择长度超过 预设阈值的精确字符串,将选择的精确字符串组合成备选字符串集; 第一过滤特征集生成子单元,用于按照精确字符串的优先级顺序从所述备选字符串集 中针对每个正则表达式选择一个精确字符串组合成第一层过滤特征集。8. 根据权利要求7所述的装置,其特征在于,所述第一过滤特征集生成单元还包括: 确定化子单元,用于将所述模糊字符串进行确定化,并与相邻的精确字符串分片合并。9. 根据权利要求7或8所述的装置,其特征在于,所述第一层过滤特征集生成子单元具 体用于: 按照字符串长度大小关系来设置所述备选字符串集中每个正则表达式对应的精确字 符串的优先级顺序,且该优先级顺序在使用过程中根据第一层过滤和第二层过滤的结果进 行调整;从每个正则表达式对应的精确字符串中选择优先级最高的精确字符串以组合成第 一层过滤特征集。10. 根据权利要求6所述的装置,其特征在于,所述装置还包括: 正则表达式超集生成单元,用于对正则表达式进行分割得到精确字符串和模糊字符 串,采用逻辑关系符号替代所述模糊字符串,根据所述精确字符串和所述逻辑关系符号生 成正则表达式超集;所述逻辑关系符号用于表征所述模糊字符串与其相邻的精确字符串之 间的逻辑关系。
【专利摘要】本发明提供了一种多模式正则表达式匹配方法及装置,其中方法包括:按照预先建立的第一层过滤特征集对待匹配数据进行过滤得到第一层过滤的数据分片和命中的精确字符串;根据所述命中的精确字符串查找对应的正则表达式超集,按照所述正则表达式超集对所述第一层过滤的数据分片进行第二层过滤得到第二层过滤的数据分片和命中的正则表达式超集;根据所述命中的正则表达式超集确定对应的正则表达式,利用所述正则表达式对所述第二层过滤的数据分片作匹配。本发明的技术方案通过两层过滤方式提高过滤速率和过滤效果,进而以保证匹配性能的稳定性,在保证攻击性数据被过滤的情况下,尽可能避免纯净数据的通过。
【IPC分类】G06F17/30
【公开号】CN104899264
【申请号】CN201510262867
【发明人】侯智瀚, 邹荣珠
【申请人】东软集团股份有限公司
【公开日】2015年9月9日
【申请日】2015年5月21日