专利名称:一种请求和接口的关联方法及系统
专利类型:发明专利
专利申请号:CN202110474479.2
专利申请(专利权)人:杭州天谷信息科技有限公司
权利人地址:浙江省杭州市西湖区西斗门路3号天堂软件园D幢19层
专利发明(设计)人:郑有乐,金宏洲,程亮
专利摘要:本发明提供一种请求和接口的关联方法及系统,方法:扫描接口配置信息,建立接口和接口方法的映射关系,根据接口方法的方法数据生成对应的接口标记代码,将接口标记代码插桩到接口方法中;根据用户请求信息生成当前线程的请求上下文对象,于当前线程执行到接口方法时,接口方法中插桩的接口标记代码被调用,接口标记代码将接口标记字符串设置到该请求上下文对象中,以根据该请求上下文对象中的接口标记字符串结合映射关系将当前的用户请求和接口进行关联设置。实现了主动对接口配置信息进行扫描,将接口标记代码插桩到接口方法,并且根据用户请求信息生成当前线程的请求上下文对象,在程序运行过程中,既获取得到当前用户请求对应的接口。
主权利要求:
1.一种请求和接口的关联方法,其特征在于,包括以下步骤:
扫描接口配置信息,以获取得到接口和与所述接口对应的接口方法,获取所述接口方法的方法数据,根据所述方法数据生成代表所述接口方法的唯一的标记字符串,并建立所述接口、所述接口方法和所述标记字符串三者之间的映射关系,根据所述标记字符串生成对应的接口标记代码,并将所述接口标记代码插桩到所述接口方法中;所述方法数据包括:所述接口方法所处的路径、类信息、方法名和方法参数列表;
接收用户请求,将所述用户请求生成当前线程的请求上下文对象;
于当前线程执行到所述接口方法时,所述接口方法中插桩的所述接口标记代码被调用,所述接口方法中的所述接口标记代码将对应的所述接口标记字符串设置到当前线程的请求上下文对象中,以根据当前线程的所述请求上下文对象中的所述接口标记字符串结合所述映射关系将当前的所述用户请求和所述接口进行关联设置。
2.如权利要求1所述的请求和接口的关联方法,其特征在于,所述接口配置信息包括配置文件和配置注解。
3.如权利要求2所述的请求和接口的关联方法,其特征在于,所述配置文件为web框架中的配置文件和配置注解。
4.如权利要求1所述的请求和接口的关联方法,其特征在于,生成得到所述请求上下文对象后,将所述请求上下文对象设置在当前线程的线程本地变量单元中。
5.如权利要求3所述的请求和接口的关联方法,其特征在于,当用户请求进入到web框架的请求分发器中时,所述请求分发器接收所述用户请求。
6.如权利要求3所述的请求和接口的关联方法,其特征在于,接收到用户请求后,采用安全检测工具将用户请求生成当前线程的所述请求上下文对象。
7.如权利要求6所述的请求和接口的关联方法,其特征在于,所述安全检测工具采用基于被动式代码插桩的IAST/RASP检测工具。
8.一种请求和接口的关联系统,其特征在于,包括以下步骤:
配置模块,用于扫描接口配置信息,以获取得到接口和与所述接口对应的接口方法,获取所述接口方法的方法数据,根据所述方法数据生成代表所述接口方法的唯一的标记字符串,并建立所述接口、所述接口方法和所述标记字符串三者之间的映射关系,根据所述标记字符串生成对应的接口标记代码,并将所述接口标记代码插桩到所述接口方法中;所述方法数据包括:所述接口方法所处的路径、类信息、方法名和方法参数列表;
请求处理模块,用于接收用户请求,将所述用户请求生成当前线程的请求上下文对象,于当前线程执行到所述接口方法时,所述接口方法中插桩的所述接口标记代码被调用,所述接口方法中的所述接口标记代码将对应的所述接口标记字符串设置到当前线程的请求上下文对象中,以根据当前线程的所述请求上下文对象中的所述接口标记字符串结合所述映射关系将当前的所述用户请求和所述接口进行关联设置。
9.一种请求和接口的关联管理设备,其特征在于,包括存储器和处理器,所述存储器上保存有可在所述处理器上运行的请求和接口的关联管理程序,所述关联管理程序被所述处理器执行时实现如权利要求1至7中任一项所述的请求和接口的关联方法。 说明书 : 一种请求和接口的关联方法及系统技术领域[0001] 本发明涉及安全扫描技术领域,尤其涉及一种请求和接口的关联方法及系统。背景技术[0002] API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。[0003] 目前的安全检测工具无法实现API的流量和接口的绑定,然而上述安全检测工具如果要实现接口检测覆盖率、流量分类、API级别的规则控制等功能,就需要一种能够绑定接口和流量的方法。[0004] 针对上述问题,目前的安全检测工具的实现方式是:根据请求分发容器获取所有请求的请求集合,当请求集合进入容器后、在请求处理分发层进行正则法则的方式对请求集合进行分类。然而上述现有技术存在误报率高、性能差等缺点,并且在高并发的场景下的精确度更差。例如,对获取用户ID为abc信息的Get请求host/user/abc和所有用户信息的Get请求host/user/users正则方法常常认为是同一个请求,不能区分。且对于未收到的请求就不能生成相关的API信息、导致无法知晓整个web项目的所有API信息就不能知道安全测试过程中的测试覆盖率问题。发明内容[0005] 针对现有技术中存在的上述问题,现提供一种请求和接口的关联方法及系统。[0006] 具体技术方案如下:[0007] 一种请求和接口的关联方法,其中,包括以下步骤:[0008] 扫描接口配置信息,以获取得到接口和与接口对应的接口方法,获取接口方法的方法数据,根据方法数据生成代表接口方法的唯一的标记字符串,并建立接口、接口方法和标记字符串三者之间的映射关系,根据标记字符串生成对应的接口标记代码,并将接口标记代码插桩到接口方法中;[0009] 接收用户请求,将用户请求生成当前线程的请求上下文对象;[0010] 于当前线程执行到接口方法时,接口方法中插桩的接口标记代码被调用,接口方法中的接口标记代码将对应的接口标记字符串设置到当前线程的请求上下文对象中,以根据当前线程的请求上下文对象中的接口标记字符串结合映射关系将当前的用户请求和接口进行关联设置。[0011] 优选的,请求和接口的关联方法,其中,接口配置信息包括配置文件和配置注解。[0012] 优选的,请求和接口的关联方法,其中,配置文件为web框架中的配置文件和配置注解。[0013] 优选的,请求和接口的关联方法,其中,生成得到请求上下文对象后,将请求上下文对象设置在当前线程的线程本地变量单元中。[0014] 优选的,请求和接口的关联方法,其中,方法数据包括:接口方法所处的路径、类信息、方法名和方法参数列表。[0015] 优选的,请求和接口的关联方法,其中,当用户请求进入到web框架的请求分发器中时,请求分发器接收用户请求。[0016] 优选的,请求和接口的关联方法,其中,接收到用户请求后,采用安全检测工具将用户请求生成当前线程的请求上下文对象。[0017] 优选的,请求和接口的关联方法,其中,安全检测工具采用基于被动式代码插桩的IAST/RASP检测工具。[0018] 还提供一种请求和接口的关联系统,其中,包括以下步骤:[0019] 配置模块,用于扫描接口配置信息,以获取得到接口和与接口对应的接口方法,获取接口方法的方法数据,根据方法数据生成代表接口方法的唯一的标记字符串,并建立接口、接口方法和标记字符串三者之间的映射关系,根据标记字符串生成对应的接口标记代码,并将接口标记代码插桩到接口方法中;[0020] 请求处理模块,用于接收用户请求,将用户请求生成当前线程的请求上下文对象,于当前线程执行到接口方法时,接口方法中插桩的接口标记代码被调用,接口方法中的接口标记代码将对应的接口标记字符串设置到当前线程的请求上下文对象中,以根据当前线程的请求上下文对象中的接口标记字符串结合映射关系将当前的用户请求和接口进行关联设置。[0021] 还提供一种请求和接口的关联管理设备,其中,包括存储器和处理器,存储器上保存有可在处理器上运行的请求和接口的关联管理程序,关联管理程序被处理器执行时实现上述中任一项的请求和接口的关联方法。[0022] 上述技术方案具有如下优点或有益效果:[0023] 通过在扫描插桩阶段,扫描得到接口和与接口对应的接口方法;[0024] 并且对接口方法对应的接口标记代码插桩到接口方法中可以实现只扫描和插装一次,之后的运行阶段只要将用户请求生成当前线程的请求上下文对象;[0025] 随后的运行过程中,不需要进行设置,就可以实现当接收用户请求,而且当前线程执行到接口方法后,通过接口标记字符串根据映射关系获取得到接口标记字符串对应的接口;[0026] 从而实现接收到用户请求获取得到接口,即实现了将用户请求和接口进行关联设置;[0027] 并且实现了在当前线程的运行阶段并没有进行进一步地设置,进而减少了对运行时的性能影响。附图说明[0028] 参考所附附图,以更加充分的描述本发明的实施例。然而,所附附图仅用于说明和阐述,并不构成对本发明范围的限制。[0029] 图1为本发明请求和接口的关联方法的实施例的流程图。具体实施方式[0030] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。[0031] 需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。[0032] 下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。[0033] 本发明包括一种请求和接口的关联方法,如图1所示,包括以下步骤:[0034] 扫描接口配置信息,以获取得到接口和与接口对应的接口方法,获取接口方法的方法数据,根据方法数据生成代表接口方法的唯一的标记字符串,并建立接口、接口方法和标记字符串三者之间的映射关系,根据标记字符串生成对应的接口标记代码,并将接口标记代码插桩到接口方法中;[0035] 接收用户请求,将用户请求生成当前线程的请求上下文对象;[0036] 于当前线程执行到接口方法时,接口方法中插桩的接口标记代码被调用,接口方法中的接口标记代码将对应的接口标记字符串设置到当前线程的请求上下文对象中,以根据当前线程的请求上下文对象中的接口标记字符串结合映射关系将当前的用户请求和接口进行关联设置。[0037] 在上述实施例中,接口为API接口。[0038] 在上述实施例中,通过在扫描插桩阶段,扫描得到接口和与接口对应的接口方法;[0039] 并且对接口方法对应的接口标记代码插桩到接口方法中可以实现只扫描和插装一次,之后的运行阶段只要将用户请求生成当前线程的请求上下文对象,并且插桩到接口方法中的接口标记代码将对应的接口标记字符串设置到当前线程的请求上下文对象中;[0040] 随后的运行过程中,不需要进行设置,就可以实现当接收用户请求,而且当前线程执行到接口方法后,既可通过接口标记字符串根据映射关系获取得到接口标记字符串对应的接口;[0041] 从而实现接收到用户请求获取得到接口,即实现了将用户请求和接口进行关联设置;[0042] 并且实现了在当前线程的运行阶段并没有进行进一步地设置,进而减少了对运行时的性能影响。[0043] 在上述实施例中,采用了扫描和接口标记代码插桩的方式,而不是现有技术中的采用正则法则方法来生产和绑定接口与接口方法,本实施例可以实现收集到更多的项目的上下文信息,因此本实施例相较于现有技术的正则法则方法,提高了将用户请求和接口进行关联设置的准确性。[0044] 在上述实施例中,采用主动式地扫描接口配置信息,以获取得到接口和与接口对应的接口方法,获取接口方法的方法数据,根据方法数据生成代表接口方法的唯一的标记字符串,并建立接口、接口方法和标记字符串三者之间的映射关系,根据标记字符串生成对应的接口标记代码,并将接口标记代码插桩到接口方法中,从而减少了处理次数,进而提高扫描得到的接口和与接口对应的接口方法的覆盖率。[0045] 在上述实施例中,被动式地接收用户请求,只有用户请求进入接口方法中时,插桩到接口方法中的接口标记代码才会被调用,即接口方法的代码和插桩到接口方法中的接口标记代码的调用都是被动的,从而减少生成的流量,随后调用后的接口标记代码将对应的接口标记字符串设置到当前线程的请求上下文对象中。[0046] 进一步地,在上述实施例中,接口配置信息包括配置文件和配置注解。[0047] 进一步地,在优选的实施方式中,配置文件为web框架中的配置文件和配置注解。[0048] 在上述实施例中,Web框架各式各样,但Web框架必然有配置文件和配置注解用来描述接口和接口方法之间的关系,不然Web框架不可能知道请求或流量进入之后该交于哪个接口方法进行处理,所以先根据不同的Web框架找到描述接口和接口方法之间的关系的配置数据,例如,struct框架中的接口和接口方法(接口方法可以为类关系)的配置文件可以为struts.xml,其中Spring框架的配置注解可以为@Controller、@RestController等;[0049] 上述框架的配置形式和规范基本不会改动、版本差异几乎无异。所以根据Web框架的配置形式和规范相比正则法则方式检测代码会更加稳定、鲜有改动。从而实现通过扫描接口配置信息,可以获取得到接口和与接口对应的接口方法。[0050] 进一步地,在上述实施例中,生成得到请求上下文对象后,将请求上下文对象设置在当前线程的线程本地变量单元中。[0051] 进一步地,在上述实施例中,方法数据包括:接口方法所处的路径、类信息、方法名和方法参数列表。[0052] 进一步地,在上述实施例中,当用户请求进入到web框架的请求分发器中时,请求分发器接收用户请求。[0053] 进一步地,在上述实施例中,接收到用户请求后,采用安全测试工具将用户请求生成当前线程的请求上下文对象。[0054] 进一步地,在上述实施例中,安全检测工具采用基于被动式代码插桩实现的IAST/RASP检测工具。[0055] 作为具体的实施方式,包括以下步骤:[0056] 项目启动,扫描web框架中的配置文件和配置注解,以获取得到接口和与接口对应的接口方法,根据方法数据生成代表接口方法的唯一的标记字符串,并建立接口、接口方法和标记字符串三者之间的映射关系(此时的映射关系可以用接口、接口方法和标记字符串三者之间的关系数据集合或映射表表示),获取接口方法的方法数据,方法数据包括:接口方法所处的路径、类信息、方法名和方法参数列表,根据标记字符串生成对应的接口标记代码,本具体实施方式中将接口标记代码记为ApiStamp标记代码,此时的ApiStamp标记代码表示当前web框架中的唯一的接口对应的接口方法的方法数据。[0057] 将ApiStamp标记代码插桩到接口方法中,此时的ApiStamp标记代码的主要功能就是在接口方法被调用时,ApiStamp标记代码将对应的接口标记字符串设置到当前线程的请求上下文对象(currentrequestcontext)属性中;[0058] 当有用户请求输入到web框架的请求分发器时(例如,请求分发器可以为Spring框架的RequestDispacher工具),可以采用IAST/RASP测试工具将用户请求生成当前线程的请求上下文对象(currentrequestcontext),之后就可以把请求上下文对象(currentrequestcontext)代表当前输入到请求分发器中的用户请求;[0059] 于当前线程执行到接口方法时,代码插桩阶段插桩到接口方法中的ApiStamp标记代码就会被调用,ApiStamp标记代码的功能是把代表当前接口方法的API信息的ApiStamp字符串设置到当前线程的请求上下文对象(currentrequestcontext)的ApiStamp属性中,之后程序就可以通过当前线程的请求上下文对象获取到当前接口方法对应的ApiStamp,根据映射关系获取到接口方法对应的Api信息,即根据映射关系获取得到接口方法对应的接口。[0060] 举例说明,未插桩有ApiStamp标记代码的接口方法,如下所示:[0061] @GetMapping(XXXXX)[0062] publicStringcmdGet(XXXXX){[0063] XXXXX[0064] }[0065] 将ApiStamp标记代码插桩到接口方法中,此时的接口方法如下所示:[0066] @GetMapping(XXXXX)[0067] publicStringcmdGet(XXXXX){[0068] currentrequestcontext.get().setApiStamp(“ApiStamp标记代码”)[0069] XXXXX[0070] }[0071] 在上述代码中,只有用户的请求进入了接口方法中,插桩的ApiStamp标记代码才会被调用。[0072] 其中,在上述举例说明中,“XXXXX”为省略的代码。[0073] 还提供一种请求和接口的关联系统,其中,包括以下步骤:[0074] 配置模块,用于扫描接口配置信息,以获取得到接口和与接口对应的接口方法,获取接口方法的方法数据,根据方法数据生成代表接口方法的唯一的标记字符串,并建立接口、接口方法和标记字符串三者之间的映射关系,根据标记字符串生成对应的接口标记代码,并将接口标记代码插桩到接口方法中;[0075] 请求处理模块,用于将用户请求生成当前线程的请求上下文对象,于当前线程执行到接口方法时,接口方法中插桩的接口标记代码被调用,接口方法中的接口标记代码将对应的接口标记字符串设置到当前线程的请求上下文对象中,以根据当前线程的请求上下文对象中的接口标记字符串结合映射关系将当前的用户请求和接口进行关联设置。[0076] 本发明请求和接口的关联系统的具体实施方式与上述请求和接口的关联方法各实施例基本相同,在此不再赘述。[0077] 还提供一种请求和接口的关联管理设备,其中,包括存储器和处理器,存储器上保存有可在处理器上运行的请求和接口的关联管理程序,关联管理程序被处理器执行时实现如上述中任一项的请求和接口的关联方法。[0078] 本发明请求和接口的关联管理设备的具体实施方式与上述请求和接口的关联方法各实施例基本相同,在此不再赘述。[0079] 以上仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。
专利地区:浙江
专利申请日期:2021-04-29
专利公开日期:2024-07-26
专利公告号:CN113254112B