CN118132676A - 一种文本的检测方法及装置 - Google Patents
一种文本的检测方法及装置 Download PDFInfo
- Publication number
- CN118132676A CN118132676A CN202410325753.3A CN202410325753A CN118132676A CN 118132676 A CN118132676 A CN 118132676A CN 202410325753 A CN202410325753 A CN 202410325753A CN 118132676 A CN118132676 A CN 118132676A
- Authority
- CN
- China
- Prior art keywords
- text
- text segment
- state
- characters
- character
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 127
- 230000007704 transition Effects 0.000 claims abstract description 125
- 238000000034 method Methods 0.000 claims abstract description 46
- 230000008569 process Effects 0.000 claims description 18
- 238000012546 transfer Methods 0.000 claims description 6
- 230000006870 function Effects 0.000 description 11
- 230000014509 gene expression Effects 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种文本的检测方法及装置,该方法包括:将待检测文本划分为多个文本段,以利用多个线程同时对不同文本段进行文本检测;针对每个文本段,在利用目标线程对该文本段进行检测时,一次性获取该文本段中的多个目标字符,并行确定多个目标字符中是否存在非信任字符;若存在非信任字符,则针对多个目标字符中首个非信任字符之后的每个目标字符,确定该目标字符对应的转移状态;若转移状态为目标状态,则返回执行一次性获取该文本段中的多个目标字符的步骤,以针对新获取的多个目标字符进行文本检测。通过采用上述文本的检测方法及装置,解决了文本检测效率低的问题。
Description
技术领域
本申请涉及网络安全技术领域,具体而言,涉及一种文本的检测方法及装置。
背景技术
网络现已称为人们生活中必不可少的一部分,然而随着互联网技术的不断发展,网络攻击的发生频率也越来越高,这些网络攻击不仅会给用户带来许多麻烦,也会在一定程度上危及网络的安全和稳定性,为了防止网络安全事件的发生,进行网络安全检测对于保障网络安全具有举足轻重的作用。传统技术,通常将正则表达式编译为确定型有限自动机(Deterministic finite automaton,DFA)来执行网络安全检测任务,即由正则表达式检测匹配引擎将NFA转换为DFA,然后由DFA对网络数据(即待检测文本)进行匹配,以实现网络安全检测。
然而,传统技术在利用DFA对文本进行检测时,通过状态转移表行串行匹配,即一个字符、一个字符地进行文本检测,导致文本检测效率低的问题。
发明内容
有鉴于此,本申请的目的在于提供一种文本的检测方法及装置,以解决传统技术中,文本检测效率低的问题。
第一方面,本申请实施例提供了一种文本的检测方法,包括:
将待检测文本划分为多个文本段,以利用多个线程同时对不同文本段进行文本检测;
针对每个文本段,在利用目标线程对该文本段进行检测时,一次性获取该文本段中的多个目标字符,并行确定多个目标字符中是否存在非信任字符,非信任字符为能够使零状态发生转移的字符;
若存在非信任字符,则针对多个目标字符中首个非信任字符之后的每个目标字符,确定该目标字符对应的转移状态;
若转移状态为目标状态,则返回执行一次性获取该文本段中的多个目标字符的步骤,以针对新获取的多个目标字符进行文本检测。
可选地,在确定该目标字符对应的转移状态之后,还包括:若转移状态不为目标状态,则确定当前字符是否处于预设范围之外,当前字符为该字符的下一个字符;若当前字符处于预设范围之外,确定当前字符对应的转移状态中是否存在可接受状态。
可选地,一次性获取该文本段中的多个目标字符,并行确定多个目标字符中是否存在非信任字符,包括:通过加载字符块一次性获取多个目标字符;利用向量比较指令对多个目标字符与非信任字符集进行并行比较,以确定多个目标字符中是否存在与非信任字符集中的非信任字符匹配的目标字符;若存在匹配的目标字符,则确定多个目标字符中存在非信任字符。
可选地,方法还包括:确定第一文本段的结尾状态是否等于第二文本段的预设的起始状态,第一文本段与第二文本段是多个文本段中前后相邻的两个文本段;若结尾状态等于起始状态,根据第一文本段及第二文本段对应的多个转移状态,确定待检测文本是否命中规则。
可选地,在确定第一文本段的结尾状态是否等于第二文本段的预设的起始状态之后,还包括:若结尾状态不等于起始状态,则分别以第一检测路径及第二检测路径对第二文本段进行检测,获得多个第一路径转移状态及多个第二路径转移状态,第一检测路径是以第一文本段的结尾状态作为第二文本段的起始状态,对第二文本段中预设范围内的字符进行检测的路径,第二检测路径是在第二文本段的起始状态不变的情况下,对第二文本段中预设范围内字符进行检测的路径;确定多个第一路径转移状态与多个第二路径转移状态是否存在交叉;若存在交叉且检测过程中存在可接受状态,则确定待检测文本命中规则;若不存在交叉且针对第一文本段的检测过程中不存在可接受状态,将第一文本段的结尾状态作为第二文本段的起始状态,并根据起始状态对第二文本段中预设范围外的字符进行文本检测。
可选地,确定多个第一路径转移状态与多个第二路径转移状态是否存在交叉,包括:针对每个第一路径转移状态,确定对应位置上的第二路径转移状态与该第一路径转移状态是否相同;若相同,则确定多个第一路径转移状态与多个第一路径转移状态存在交叉。
可选地,在并行确定多个目标字符中是否存在非信任字符之后,还包括:若不存在非信任字符,则跳过对多个目标字符的文本检测,并选取处于多个目标字符之后的多个字符作为新的多个目标字符,以确定新的多个目标字符中是否存在非信任字符。
可选地,根据第一文本段及第二文本段对应的多个转移状态,确定待检测文本是否命中规则,包括:若第一文本段及第二文本段对应的多个转移状态中存在可接受状态,则确定待检测文本命中规则;若第一文本段及第二文本段对应的多个转移状态中不存在可接受状态,则将第二文本段作为新的第一文本段,将第二文本段之后的文本段作为新的第二文本段,以根据新的第一文本段及新的第二文本段确定待检测文本是否命中规则。
可选地,在若存在交叉且检测过程中存在可接受状态之后,还包括:若存在交叉且检测过程中不存在可接受状态,则将第二文本段作为新的第一文本段,将第二文本段之后的文本段作为新的第二文本段,以根据新的第一文本段及新的第二文本段确定待检测文本是否命中规则。
第二方面,本申请实施例还提供了一种文本的检测装置,所述装置包括:
文本划分模块,用于将待检测文本划分为多个文本段,以利用多个线程同时对不同文本段进行文本检测;
非信任字符检测模块,用于针对每个文本段,在利用目标线程对该文本段进行检测时,一次性获取该文本段中的多个目标字符,并行确定多个目标字符中是否存在非信任字符,非信任字符为能够使零状态发生转移的字符;
转移状态确定模块,用于若存在非信任字符,则针对多个目标字符中首个非信任字符之后的每个目标字符,确定该目标字符对应的转移状态;
循环迭代模块,用于若转移状态为目标状态,则返回执行一次性获取该文本段中的多个目标字符的步骤,以针对新获取的多个目标字符进行文本检测。
本申请实施例带来了以下有益效果:
本申请实施例提供的一种文本的检测方法及装置,能够利用多线程同时对待检测文本的多个文本段进行检测,避免了因依次对每个字符进行串行检测而带来的文本检测速度慢的问题,同时,还能够对一次性读取的多个目标字符进行并行检测,以从文本段及字符两个层面进行并行检测加速,进一步提高了文本检测效率,与传统技术中的文本的检测方法相比,解决了传统技术中文本检测效率低的问题。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的文本的检测方法的流程图;
图2示出了本申请实施例所提供的状态转移表的示意图;
图3示出了本申请实施例所提供的多个目标字符中存在非信任字符的确定方法的流程图;
图4示出了本申请实施例所提供的转移状态不为目标状态时文本检测方法的流程图;
图5示出了本申请实施例所提供的状态检测方法的流程图;
图6示出了本申请实施例所提供的文本的检测装置的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的每个其他实施例,都属于本申请保护的范围。
值得注意的是,在本申请提出之前,网络现已称为人们生活中必不可少的一部分,然而随着互联网技术的不断发展,网络攻击的发生频率也越来越高,这些网络攻击不仅会给用户带来许多麻烦,也会在一定程度上危及网络的安全和稳定性,为了防止网络安全事件的发生,进行网络安全检测对于保障网络安全具有举足轻重的作用。传统技术,通常将正则表达式编译为确定型有限自动机(Deterministic finite automaton,DFA)来执行网络安全检测任务,即由正则表达式检测匹配引擎将NFA转换为DFA,然后由DFA对网络数据(即待检测文本)进行匹配,以实现网络安全检测。然而,传统技术在采用DFA扫描引擎对文本进行检测时,通过状态转移表进行串行匹配,即按照字符在待检测文本中的先后顺序,一个字符、一个字符地进行文本检测,导致文本检测效率低的问题。
基于此,本申请实施例提供了一种文本的检测方法,以提高文本检测效率。
请参阅图1,图1为本申请实施例所提供的一种文本的检测方法的流程图。如图1所示,本申请实施例提供的文本的检测方法,包括:
步骤S101,将待检测文本划分为多个文本段,以利用多个线程同时对不同文本段进行文本检测。
该步骤中,待检测文本可以理解为被检测的对象,待检测文本为大型文本,待检测文本中包括多个字符,多个字符可以是中文,也可以是英文,还可以是其他特殊字符,例如:运算符、标识符等。
多个文本段可指待检测文本的部分片段,多个文本段共同组成待检测文本,每个文本段包括多个字符,例如:将待检测文本T分为T1、T2、T3、…、Tn等n个文本段,且n个文本段是按照待检测文本T中字符的顺序分割得到的,例如:待检测文本T的第一组1万个字符对应T1文本段,待检测文本T的第二组1万个字符对应T2文本段,以此类推。
在本申请实施例中,使用多线程技术开辟多个线程,线程数量与文本段数量相同,以使得一个线程对一个文本段进行检测,假设将待检测文本T划分为10个文本段,则可利用10个线程对这10个文本段同时进行并行检测,以提高文本检测效率。
在利用多个线程同时对多个文本段分别进行文本检测之前,需要建立信任字符集和非信任字符集。这里,首先根据检测文本时使用的正则表达式,获得DFA状态转移表,并统计该状态转移表中哪些字符会导致最常被访问状态发生转移,将导致最常被访问状态发生转移的字符称为非信任字符集中的非信任字符,由所有非信任字符构成的集合称为非信任字符集;将不会导致最常被访问状态发生转移的字符称为信任字符集中的信任字符,由所有信任字符构成的集合称为信任字符集。其中,最常被访问状态指的是零状态(0状态或者状态0)。即在输入一个字符后,若当前状态由零状态转移为其他的非零状态,例如:由状态0转移为状态3,则将该字符作为非信任字符,非信任字符为能够使零状态发生转移的字符;若当前状态由零状态转移为零状态,即零状态未发生转移,则将该字符作为信任字符。
下面参照图2来介绍信任字符与非信任字符。
图2示出了本申请实施例所提供的状态转移表的示意图,如图2所示,状态转移表共有5个状态,分别是状态0、状态1、状态2、状态3、状态4;共有5个字符,分别是a、b、c、d、e。在最常被访问状态为状态0时,如果对字符a、字符b及字符d进行检测,则获得的转移状态分别为3、2、1(当前状态由0变为3、2、1),如果对字符c及字符e进行检测,则获得的转移状态均为0(当前状态均由0变为0),因此,在该示例中,字符a、b、d为非信任字符集中的非信任字符,字符c、e为信任字符集中的信任字符。
步骤S102,针对每个文本段,在利用目标线程对该文本段进行检测时,一次性获取该文本段中的多个目标字符,并行确定多个目标字符中是否存在非信任字符。
该步骤中,为了提高文本检测效率,可一次性获取多个目标字符,并同时对多个目标字符执行并行处理。
在本申请实施例中,将所有文本段的起始状态均设置为状态0,即设置为最常被访问状态,在这一前提下进行后续处理。由于多个文本段在不同线程中的处理过程相同,因此后续仅以一个线程对一个文本段进行检测为例进行说明。
下面参照图3来介绍多个目标字符的并行处理过程,图3示出了本申请实施例所提供的多个目标字符中存在非信任字符的确定方法的流程图,如图3所示,步骤S102包括:
步骤S102A,通过加载字符块一次性获取多个目标字符。
以文本段A为例,该文本段A对应的线程a会通过LoadCharBlock()字符块加载函数从文本段A中一次性获取多个目标字符,即执行CharBlock=LoadCharBlock()。其中,字符块加载函数用于读取文本段A中位于[pos、pos+1、…、pos+W-1]位置的字符,由于每个文本段的起始状态均为0,则首次获取文本段A中的字符时,即可一次性获取W个目标字符,W为Intel AVX向量对应的字符宽,例如:针对512位宽的系统来说W=64。其中,pos表示当前的字符位置,在初始时pos=0。
步骤S102B,利用向量比较指令对多个目标字符与非信任字符集进行并行比较,以确定多个目标字符中是否存在与非信任字符集中的非信任字符匹配的目标字符。
执行MaskVec[i]=_mm512_cmpeq_epi8(CharBlock,UntrustCharSet[i]),其中,i∈[0,K-1],K表示非信任字符的数量。_mm512_cmpeq_epi8()为内置向量比较指令,_mm512_cmpeq_epi8()这个函数具备基于单指令多数据流(SIMD指令)实现数据的快速比较功能,可以将512位(64个字符)的打包整型数据和64个非信任字符a进行比较,执行1次比较就可以判断出哪些字符与非信任字符a相等,如果字符与非信任字符a(8位整数)相等,则MaskVec中相应位被设置为0xFF(所有比特位为1),否则设置为0x00。如果没有这个函数,则需要通过循环来逐一处理这64个目标字符与非信任字符a比较,需执行64步。512为IntelAVX向量对应的比特位宽,根据系统的不同该数值还可以是128或者256,未来随着硬件技术的发展还可能扩展成1024,甚至更大的比特位宽,UntrustCharSet表示非信任字符集。通过该向量比较指令,能够并行地对一次性获取到CharBlock中的64个目标字符与非信任字符集中的每个非信任字符进行比较,以确定这64个目标字符中是否存在非信任字符。然后由所有MaskVec[i]构成MaskVec。
由于获得的比较结果MaskVec为比特向量,需要将比特向量转为掩码。这里,可执行Mask=_mm512_movemask_epi8_512(MaskVec)。其中,512为Intel AVX向量对应的比特位宽,_mm512_movemask_epi8_XX()函数用于将向量MaskVec[i]中的每个字节转换成相应的掩码,每个掩码的位表示相应字节是否为非零。例如:MaskVec位宽为512位,那么转换后的Mask为64位,每一位表示MaskVec对应的字节为零或者非零。
步骤S102C,若存在匹配的目标字符,则确定多个目标字符中存在非信任字符。
如果Mask≠0,则说明64个目标字符中存在非信任字符,即存在输入该字符检测后,当前状态由状态0变为除状态0之外的其他状态,则执行步骤S103。如果Mask=0,则说明64个目标字符中不存在非信任字符,即当前状态均为由状态0变为状态0,无需对这64个目标字符进行检测。
若不存在非信任字符,则跳过对多个目标字符的文本检测,并选取处于多个目标字符之后的多个字符作为新的多个目标字符,以确定新的多个目标字符中是否存在非信任字符。这里,跳过对这64个(第0位至第63位)目标字符的检测之后,一次性获取该文本段中第64位至第127位的64个字符作为第二组的多个目标字符,以确定新的多个目标字符中是否存在非信任字符。以此类推,不断重复执行步骤S102A至步骤S102C,确定后续每组多个目标字符中是否存在非信任字符,直至确定该文本段中某组多个目标字符中存在非信任字符,则执行步骤S103。
步骤S103,若存在非信任字符,则针对多个目标字符中首个非信任字符之后的每个目标字符,确定该目标字符对应的转移状态。
该步骤中,转移状态可指对目标字符检测后获得的最新的当前状态,例如:当前状态为0,如果对目标字符a检测后当前状态由0变为3,则状态3即为最新的当前状态,也即该目标字符a对应的转移状态。
假设,多个目标字符为b、d、c,由于存在非信任字符,则获取首个非信任字符b的位置,利用状态转移表,确定非信任字符b之后的每个目标字符对应的转移状态,其中,非信任字符b之后的目标字符包括首个非信任字符b在内。这里,可通过pos+=__builtin_ctz(Mask)函数来获取首个非信任字符的位置,其中,__builtin_ctz()函数用于返回输入整数Mask的二进制表示中从最高位(即最右侧位)到第一个为1的位的位数,例如:对于Mask=8(二进制表示为1000)来说,__builtin_ctz(Mask)返回的值为3,因为从最高位到第一个为1的位之间共有3位。然后,访问内存中的状态转移表,利用该状态转移表确定每个目标字符对应的转移状态。
需要说明的是,由于信任字符的转移状态为状态0,而可接受状态不是状态0,因此可直接跳过信任字符,而直接获取首个非信任字符的位置,以从该位置开始确定每个目标字符的转移状态,这样可以提高文本检测效率。
下面参照图4来介绍转移状态不为目标状态时的文本检测流程,图4示出了本申请实施例所提供的转移状态不为目标状态时文本检测方法的流程图,如图4所示,在步骤S103之后,还包括:
步骤S103A,若转移状态不为目标状态,则确定当前字符是否处于预设范围之外。
这里,当前字符为该字符的下一个字符,目标状态可指零状态(状态0)。通过状态转移表获取首个非信任字符b对应的转移状态,由于非信任字符b对应的转移状态不是状态0,则将非信任字符b的下一个字符作为当前字符,即将目标字符d作为当前字符,确定当前字符d的位置是否处于预设范围之外。其中,预设范围指的是[0,DANGER_AREA],DANGER_AREA为一固定数值,例如:100,本领域技术人员可以根据实际情况选择DANGER_AREA的具体取值,本申请在此不作限定。
步骤S103B,若当前字符处于预设范围之外,确定当前字符对应的转移状态中是否存在可接受状态。
若当前字符d处于预设范围[0,100]之内,则将目标字符d的下一个字符作为新的当前字符,即将目标字符c作为新的当前字符,返回执行确定该目标字符对应的转移状态的步骤,即确定当前字符c对应的转移状态。以针对当前字符c继续执行步骤S103A至步骤S103C,以此类推,只要每个目标字符对应的转移状态都不为状态0。
若当前字符d处于预设范围[0,100]之外,即当前字符d处于该文本段的第101个字符之后,则确定当前字符d对应的转移状态中是否存在可接受状态,以可接受状态为4为例,即确定第101个字符对应的转移状态是否为4。
如果确定第101个字符对应的转移状态为4的字符,则说明该文本段可能命中正则表达式规则。如果不存在可接受状态,则继续将当前字符d的下一个字符作为新的当前字符,新的多个目标字符,以针对当前字符继续执行步骤S103A至步骤S103C,以此类推,只要每个目标字符对应的转移状态都不为状态0,则重复上述过程,以对新的当前字符继续进行文本检测。
步骤S104,若转移状态为目标状态,则返回执行一次性获取该文本段中的多个目标字符的步骤,以针对新获取的多个目标字符进行文本检测。
该步骤中,如果当前字符对应的转移状态是状态0,则说明此时的转移状态与设定该文本段的起始状态是相同的,此时可以继续使用单指令多数据流对多个目标字符进行并行处理,即重复上述步骤S102至步骤S104,以对下一组多个目标字符继续进行文本检测。其中,单指令多数据流可通过一个控制器来同时开展多个处理器,每组数据又可实现独立操作和执行,真正意义上实现了数据的并行处理。
重复上述步骤,可以确定每个文本段的所有字符对应的转移状态(信任字符对应的转移状态为状态0)。但是,由于每个文本段的起始状态是预设的,不一定准确,需要根据文本段之间的先后关系,依次确定预设的每个文本段的起始状态是否正确,如果起始状态不正确,则需要重新进行文本检测。
下面参照图5来介绍状态检测流程,图5示出了本申请实施例所提供的状态检测方法的流程图,如图5所示,在步骤S104之后还包括:
步骤S105,确定第一文本段的结尾状态是否等于第二文本段的预设的起始状态。
这里,第一文本段与第二文本段是多个文本段中前后相邻的两个文本段,例如:待检测文本共划分为十个文本段,则如果第一文本段是第二个文本段,则第二文本段是第三个文本段;如果第一个文本段是第三个文本段,则第二文本段是第四个文本段。
需要说明的是,在进行文本段的状态检测时,是从第一个文本段和第二个文本段开始的,即此时第一轮状态检测的第一文本段指的是第一个文本段,第二文本段指的是第二个文本段。当完成对第一个文本段及第二个文本段的状态检测后,开始第二轮状态检测,本轮中将第二个文本段作为第一文本段,将第三个文本段作为第二文本段,以此类推,直至最后一轮状态检测中将倒数第二个文本段作为第一文本段,将最后一个文本段作为第二文本段。
具体的,以当前状态检测轮次为第一轮状态检测为例,第一个文本段即为第一文本段,第二个文本段即为第二文本段,将第一文本段中最后一个字符对应的转移状态作为第一文本段的结尾状态,确定第一文本段的结尾状态是否等于第二文本段的预设的起始状态,即确定第一文本段的结尾状态是否等于0。
步骤S106,若结尾状态等于起始状态,根据第一文本段及第二文本段对应的多个转移状态,确定待检测文本是否命中规则。
如果第一文本段的结尾状态等于0,则确定第一文本段及第二文本段对应的多个转移状态中是否存在可接受状态,若第一文本段及第二文本段对应的多个转移状态中存在可接受状态,则确定待检测文本命中规则,即第一个文本段及第二个文本段命中正则表达式规则。
若第一文本段及第二文本段对应的多个转移状态中不存在可接受状态,则将第二文本段作为新的第一文本段,将第二文本段之后的文本段作为新的第二文本段,以根据新的第一文本段及新的第二文本段确定待检测文本是否命中规则。即将第二个文本段作为新的第一文本段,将第三个文本段作为新的第二文本段,重新从步骤S105开始执行,以开启新一轮的状态检测,确定第二个文本段和第三个文本段是否命中正则表达式规则,以此类推,直至完成最后一轮的状态检测,以确定所有文本段中哪些文本段命中正则表达式规则。
步骤S107,若结尾状态不等于起始状态,则分别以第一检测路径及第二检测路径对第二文本段进行检测,获得多个第一路径转移状态及多个第二路径转移状态。
第一检测路径是以第一文本段的结尾状态作为第二文本段的起始状态,对第二文本段中预设范围内的字符进行检测的路径;第二检测路径是在第二文本段的起始状态不变的情况下,对第二文本段中预设范围内字符进行检测的路径。
以第一检测路径对第二文本段中[0,DANGER_AREA]内的字符进行检测,得到多个第一路径转移状态。以第二检测路径对第二文本段中[0,DANGER_AREA]内的字符进行检测,得到多个第二路径转移状态。
步骤S108,确定多个第一路径转移状态与多个第二路径转移状态是否存在交叉。
具体的,针对每个第一路径转移状态,确定对应位置上的第二路径转移状态与该第一路径转移状态是否相同;若相同,则确定多个第一路径转移状态与多个第一路径转移状态存在交叉。
例如:多个第一路径转移状态分别为2、1、3、5、2、0、1、3,多个第二路径转移状态分别为1、2、3、5、2、0、1、3,由于多个第一路径转移状态及多个第二路径转移状态中位于第三位的转移状态均为3,即对应位置上的第二路径转移状态与该第一路径转移状态相同,因此,确定多个第一路径转移状态与多个第一路径转移状态之间存在交叉。反之,若每个第一路径转移状态与对应位置上的第二路径转移状态均不相同,则确定多个第一路径转移状态与多个第一路径转移状态之间不存在交叉。由于第一路径转移状态与第二路径转移状态都是同一组字符对应的转移状态,因此,如果两个路径转移状态之间存在交叉,则交叉点之后的转移状态必然全部相同。
步骤S109,若存在交叉且检测过程中存在可接受状态,则确定待检测文本命中规则。
这里,检测过程包括状态检测过程及步骤S103中确认目标字符的转移状态的检测过程,其中,步骤S103中确认目标字符的转移状态的检测过程包括第一文本段及第二文本段。以可接受状态为状态4为例,在存在交叉的情况下,如果检测过程中存在某个转移状态等于4,则可确定第二文本段命中正则表达式规则。
若存在交叉且检测过程中不存在可接受状态,说明第一文本段及第二文本段均没有命中正则表达式规则,需要继续对后续文本段进行检测,则将第二文本段作为新的第一文本段,将第二文本段之后的文本段作为新的第二文本段,以根据新的第一文本段及新的第二文本段确定待检测文本是否命中规则。例如:第二文本段为第二个文本段,则将第二个文本段作为新的第一文本段,将第三个文本段作为新的第二文本段,返回执行步骤S105,如此循环,直至完成对所有文本段的状态检测。
步骤S110,若不存在交叉且针对第一文本段的检测过程中不存在可接受状态,将第一文本段的结尾状态作为第二文本段的起始状态,并根据起始状态对第二文本段中预设范围外的字符进行文本检测。
若不存在交叉且针对第一文本段的检测过程中不存在可接受状态,说明按照第一文本段的结尾状态对第二文本段进行文本检测,与按照设定的第二文本段的起始状态对第二文本段进行文本检测,两者得到的结果存在较大差别,需要重新对第二文本段进行检测。因此,将第一文本段的结尾状态作为第二文本段的起始状态,重新根据该起始状态对第二文本段中[DANGER_AREA,N]区间内的字符进行文本检测。其中,[DANGER_AREA,N]区间的字符即为预设范围外的字符,N表示第二本段的最后一个字符的位置,例如:如果第二文本段共10001个字符,则[100、10000]。之所以直接对第二文本段中[DANGER_AREA、N]区间内的字符进行文本检测,是因为之前已经以第一检测路径对第二文本段中的[0,DANGER_AREA]进行了检测,并获得多个第一路径转移状态。
当完成重新对第二文本段进行检测之后,本轮的状态检测过程结束,将第二文本段作为新的第一文本段,将第二文本段的下一文本段作为新的第二文本段,以针对新的第一文本段及新的第二文本段开启下一轮的状态检测,以此类推,直至完成所有文本段的状态检测。
与传统技术中文本的检测方法相比,本申请能够利用多线程同时对待检测文本的多个文本段进行检测,避免了因依次对每个字符进行串行检测而带来的文本检测速度慢的问题,同时,还能够对一次性读取的多个目标字符进行并行检测,以从文本段及字符两个层面进行并行检测加速,进一步提高了文本检测效率,解决了传统技术中文本检测效率低的问题。
基于同一发明构思,本申请实施例中还提供了与文本的检测方法对应的文本的检测装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述文本的检测方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参阅图6,图6为本申请实施例所提供的一种文本的检测装置的结构示意图。如图6中所示,所述文本的检测装置200包括:
文本划分模块201,用于将待检测文本划分为多个文本段,以利用多个线程同时对不同文本段进行文本检测;
非信任字符检测模块202,用于针对每个文本段,在利用目标线程对该文本段进行检测时,一次性获取该文本段中的多个目标字符,并行确定多个目标字符中是否存在非信任字符,非信任字符为能够使零状态发生转移的字符;
转移状态确定模块203,用于若存在非信任字符,则针对多个目标字符中首个非信任字符之后的每个目标字符,确定该目标字符对应的转移状态;
循环迭代模块204,用于若转移状态为目标状态,则返回执行一次性获取该文本段中的多个目标字符的步骤,以针对新获取的多个目标字符进行文本检测。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对传统技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种文本的检测方法,其特征在于,包括:
将待检测文本划分为多个文本段,以利用多个线程同时对不同文本段进行文本检测;
针对每个文本段,在利用目标线程对该文本段进行检测时,一次性获取该文本段中的多个目标字符,并行确定所述多个目标字符中是否存在非信任字符,所述非信任字符为能够使零状态发生转移的字符;
若存在非信任字符,则针对所述多个目标字符中首个非信任字符之后的每个目标字符,确定该目标字符对应的转移状态;
若所述转移状态为目标状态,则返回执行所述一次性获取该文本段中的多个目标字符的步骤,以针对新获取的多个目标字符进行文本检测。
2.根据权利要求1所述的方法,其特征在于,在所述确定该目标字符对应的转移状态之后,还包括:
若所述转移状态不为目标状态,则确定当前字符是否处于预设范围之外,所述当前字符为该字符的下一个字符;
若所述当前字符处于预设范围之外,确定所述当前字符对应的转移状态中是否存在可接受状态。
3.根据权利要求1所述的方法,其特征在于,所述一次性获取该文本段中的多个目标字符,并行确定所述多个目标字符中是否存在非信任字符,包括:
通过加载字符块一次性获取多个目标字符;
利用向量比较指令对所述多个目标字符与非信任字符集进行并行比较,以确定所述多个目标字符中是否存在与所述非信任字符集中的非信任字符匹配的目标字符;
若存在匹配的目标字符,则确定所述多个目标字符中存在非信任字符。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定第一文本段的结尾状态是否等于第二文本段的预设的起始状态,所述第一文本段与所述第二文本段是所述多个文本段中前后相邻的两个文本段;
若所述结尾状态等于所述起始状态,根据所述第一文本段及所述第二文本段对应的多个转移状态,确定所述待检测文本是否命中规则。
5.根据权利要求4所述的方法,其特征在于,在所述确定第一文本段的结尾状态是否等于第二文本段的预设的起始状态之后,还包括:
若所述结尾状态不等于所述起始状态,则分别以第一检测路径及第二检测路径对所述第二文本段进行检测,获得多个第一路径转移状态及多个第二路径转移状态,所述第一检测路径是以所述第一文本段的结尾状态作为第二文本段的起始状态,对第二文本段中预设范围内的字符进行检测的路径,所述第二检测路径是在第二文本段的起始状态不变的情况下,对第二文本段中预设范围内字符进行检测的路径;
确定所述多个第一路径转移状态与所述多个第二路径转移状态是否存在交叉;
若存在交叉且检测过程中存在可接受状态,则确定所述待检测文本命中规则;
若不存在交叉且针对所述第一文本段的检测过程中不存在可接受状态,将所述第一文本段的结尾状态作为所述第二文本段的起始状态,并根据所述起始状态对所述第二文本段中预设范围外的字符进行文本检测。
6.根据权利要求5所述的方法,其特征在于,所述确定所述多个第一路径转移状态与所述多个第二路径转移状态是否存在交叉,包括:
针对每个第一路径转移状态,确定对应位置上的第二路径转移状态与该第一路径转移状态是否相同;
若相同,则确定所述多个第一路径转移状态与所述多个第一路径转移状态存在交叉。
7.根据权利要求1所述的方法,其特征在于,在所述并行确定所述多个目标字符中是否存在非信任字符之后,还包括:
若不存在非信任字符,则跳过对所述多个目标字符的文本检测,并选取处于所述多个目标字符之后的多个字符作为新的多个目标字符,以确定所述新的多个目标字符中是否存在非信任字符。
8.根据权利要求4所述的方法,其特征在于,所述根据所述第一文本段及所述第二文本段对应的多个转移状态,确定所述待检测文本是否命中规则,包括:
若所述第一文本段及所述第二文本段对应的多个转移状态中存在可接受状态,则确定所述待检测文本命中规则;
若所述第一文本段及所述第二文本段对应的多个转移状态中不存在可接受状态,则将所述第二文本段作为新的第一文本段,将所述第二文本段之后的文本段作为新的第二文本段,以根据所述新的第一文本段及所述新的第二文本段确定待检测文本是否命中规则。
9.根据权利要求5所述的方法,其特征在于,在所述若存在交叉且检测过程中存在可接受状态之后,还包括:
若存在交叉且检测过程中不存在可接受状态,则将所述第二文本段作为新的第一文本段,将所述第二文本段之后的文本段作为新的第二文本段,以根据所述新的第一文本段及所述新的第二文本段确定待检测文本是否命中规则。
10.一种文本的检测装置,其特征在于,包括:
文本划分模块,用于将待检测文本划分为多个文本段,以利用多个线程同时对不同文本段进行文本检测;
非信任字符检测模块,用于针对每个文本段,在利用目标线程对该文本段进行检测时,一次性获取该文本段中的多个目标字符,并行确定所述多个目标字符中是否存在非信任字符,所述非信任字符为能够使零状态发生转移的字符;
转移状态确定模块,用于若存在非信任字符,则针对所述多个目标字符中首个非信任字符之后的每个目标字符,确定该目标字符对应的转移状态;
循环迭代模块,用于若所述转移状态为目标状态,则返回执行所述一次性获取该文本段中的多个目标字符的步骤,以针对新获取的多个目标字符进行文本检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410325753.3A CN118132676A (zh) | 2024-03-21 | 2024-03-21 | 一种文本的检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410325753.3A CN118132676A (zh) | 2024-03-21 | 2024-03-21 | 一种文本的检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118132676A true CN118132676A (zh) | 2024-06-04 |
Family
ID=91230133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410325753.3A Pending CN118132676A (zh) | 2024-03-21 | 2024-03-21 | 一种文本的检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118132676A (zh) |
-
2024
- 2024-03-21 CN CN202410325753.3A patent/CN118132676A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9990583B2 (en) | Match engine for detection of multi-pattern rules | |
US20160255100A1 (en) | Filter for network intrusion and virus detection | |
US20120072988A1 (en) | Detection of global metamorphic malware variants using control and data flow analysis | |
US10032021B2 (en) | Method for detecting a threat and threat detecting apparatus | |
CN117675417B (zh) | 一种文本的快速扫描方法、装置、电子设备及存储介质 | |
CN113259176B (zh) | 一种告警事件分析方法和装置 | |
JPWO2018066516A1 (ja) | 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム | |
KR101645019B1 (ko) | 소프트웨어 보안취약점 검출을 위한 규칙명세언어 | |
CN116248337A (zh) | 一种基于测试用例自动化生成的协议模糊测试方法及装置 | |
US9690873B2 (en) | System and method for bit-map based keyword spotting in communication traffic | |
JP6777612B2 (ja) | コンピュータシステムにおけるデータ損失を防止するためのシステム及び方法 | |
CN118132676A (zh) | 一种文本的检测方法及装置 | |
CN112070161A (zh) | 一种网络攻击事件分类方法、装置、终端及存储介质 | |
CN117690153B (zh) | 一种基于确定型有限自动机的文本检测方法、装置及设备 | |
CN112994931B (zh) | 一种规则匹配的方法及其设备 | |
CN117975485B (zh) | 一种字符串的扫描方法、装置、电子设备及存储介质 | |
Reviriego et al. | On the security of the k minimum values (KMV) sketch | |
KR102462649B1 (ko) | 커뮤니티 탐색을 위한 그래프 재구성 전략 | |
KR101802443B1 (ko) | 컴퓨터 수행 가능한 침입탐지방법, 시스템 및 컴퓨터 판독 가능한 기록매체 | |
Fogler et al. | Accelerating black box testing with light-weight learning | |
Mendivelso et al. | Finding overlaps within regular expressions with variable-length gaps | |
Zhong et al. | Accelerating dfa construction based on hierarchical merging | |
KR101465132B1 (ko) | 다중바이트 처리 프리필터를 사용한 심층 패킷 검사 가속화 방법 및 이를 이용한 장치 | |
CN116418742A (zh) | 一种解决ipfix哈希冲突的方法、装置及存储介质 | |
Qiang et al. | Multiple pattern matching with wildcards and one-off condition |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |