基于docker的测试方法及装置与流程

文档序号:17475649发布日期:2019-04-20 06:06阅读:296来源:国知局
基于docker的测试方法及装置与流程

本公开涉及计算机安全技术领域,尤其涉及一种基于docker的测试方法及装置。



背景技术:

沙盒,也称为沙箱或沙盘,在计算机领域指一种虚拟技术,其基本原理是:根据计算机程序的真实运行环境,创建一个虚拟的运行环境,把每个程序封装在不同的盒子中,从而保证每个程序的python环境都是独立的。当某个程序试图发挥作用时,可以先让它在沙盒中运行,程序在沙盒中造成的所有改动不会对真实的运行环境造成任何影响。

现有技术中使用第三方库virtualenv来创建沙盒环境,虽然第三方库virtualenv给python使用者提供方便,但是第三方库virtualenv的代码是开源的,存在安全风险。



技术实现要素:

本公开实施例提供一种沙盒环境的构建方法及装置,能够解决因第三方库的代码开源性而存在安全风险的问题。所述技术方案如下:

根据本公开实施例的第一方面,提供一种基于docker的测试方法,该方法包括:

基于应用容器引擎docker构建容器测试环境;

在容器测试环境中运行python测试用例;

获取python测试用例的测试结果。

通过使用docker建立与外界隔离的运行环境,在容器中运行python测试用例,解决因第三方库的代码开源性而存在安全风险的问题。

在一个实施例中,基于应用容器引擎docker构建容器测试环境包括:

利用dockerfile构建docker镜像;

通过运行docker镜像启动容器。

在一个实施例中,在容器测试环境中运行python测试用例包括:

获取url访问请求,url访问请求包括端口映射地址、函数路径信息中的至少一个;

对url访问请求进行路由匹配,获取与url访问请求对应的函数;

获取待测试信息,待测试信息包括待测试程序、待测试目标url、待测试参数中的至少一个;

根据待测试信息调用并运行函数。

在一个实施例中,获取python测试用例的测试结果包括:

采用挂钩hook机制获取python测试用例的测试结果。

根据本公开实施例的第二方面,提供一种基于docker的测试装置,包括:构建模块、运行模块、获取模块;

构建模块,用于基于应用容器引擎docker构建容器测试环境;

运行模块,用于在容器测试环境中运行python测试用例;

获取模块,用于获取python测试用例的测试结果。

在一个实施例中,构建模块,用于利用dockerfile构建docker镜像,并通过运行docker镜像启动容器。

在一个实施例中,运行模块包括:获取子模块、匹配子模块、运行子模块;

获取子模块,用于获取url访问请求,url访问请求包括端口映射地址、函数路径信息中的至少一个;

匹配子模块,用于对url访问请求进行路由匹配,获取与url访问请求对应的函数;

获取子模块,用于获取待测试信息,待测试信息包括待测试程序、待测试目标url、待测试参数中的至少一个;

运行子模块,用于根据待测试信息调用并运行函数。

在一个实施例中,获取模块,用于采用挂钩hook机制获取python测试用例的测试结果。

根据本公开实施例的第三方面,提供一种基于docker的测试设备,该基于docker的测试设备包括处理器和存储器,存储器中存储有至少一条计算机指令,指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的基于docker的测试设备中所执行的步骤。

根据本公开实施例的第三方面,提供一种计算机可读存储介质,该存储介质中存储有至少一条计算机指令,指令由处理器加载并执行以实现第一方面以及第一方面的任一实施例所描述的的基于docker的测试方法中所执行的步骤。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1是本公开实施例提供的一种基于docker的测试方法的流程图;

图2是本公开实施例提供的一种插件助手的界面示意图;

图3是本公开实施例提供的一种基于docker的测试装置的结构图;

图4是本公开实施例提供的一种基于docker的测试装置的结构图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

本公开实施例提供一种基于docker的测试方法,如图1所示,该基于docker的测试方法包括以下步骤:

101、基于应用容器引擎docker构建容器测试环境。

在本公开实施例中,基于应用容器引擎docker构建容器测试环境包括:利用dockerfile构建docker镜像;通过运行docker镜像启动容器。

dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像(image),这个新的镜像为可以用于创建容器(container)的镜像;docker镜像是一个只读模板,例如:一个镜像可以包含一个完整的操作系统环境和用户需要的其他应用程序。镜像可以用来创建docker容器,一个镜像可以创建多个容器;docker是利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动、开始、停止、删除。通过容器构建沙盒环境。

在通过运行docker镜像启动容器时,还需要指定容器映射到宿主机的端口映射参数,如果docker容器在启动时不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。同时,设定容器的重启参数,并设定一些规则,如禁止来自容器的ip访问宿主机。

102、在容器测试环境中运行python测试用例。

在本公开实施例中,在容器测试环境中运行python测试用例包括:

获取url访问请求,url访问请求包括端口映射地址、函数路径信息中的至少一个;对url访问请求进行路由匹配,获取与url访问请求对应的处理函数;获取待测试信息,待测试信息包括待测试程序、待测试目标url、待测试参数中的至少一个;根据待测试信息调用并运行处理函数。

当url访问请求包括端口映射地址时,通过该端口映射地址可以访问到该容器,此时,该端口映射地址与默认的处理函数相对应,通过对url访问请求进行路由匹配,获取到与该端口映射地址对应的函数,进而,将待测试信息作为该函数的参数,调用并运行该函数。

当url访问请求包括端口映射地址和函数路径信息时,通过该端口映射地址可以访问到该容器,此时,通过url访问请求的路由匹配,获取与该函数路径信息对应的函数,进而,将待测试信息作为该函数的参数,调用并运行该函数。

103、获取python测试用例的测试结果。

在本公开实施例中,获取python测试用例的测试结果包括:采用挂钩hook机制获取所述python测试用例的测试结果。所谓hook机制又叫做钩子函数,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件,在本公开实施例中,通过钩子函数来捕获python测试用例的测试结果。

为例更加清楚理解本公开实施例提供的基于docker的测试方法,下面举几个示例进行具体说明。

在第一个示例中,以插件沙盒为例,若容器的端口映射信息为http://ip:9000/,那么,当用户访问http://ip:9000/时,根据访问的url(uniformresourcelocator,统一资源定位符)进行路由匹配,匹配到form_submit(表单-提交)函数,获取到在容器中运行的python程序,使用hook(钩子)机制对python程序的输出进行处理,返回hook之后的输出到界面上。通过该功能可以实现对插件的测试运行,并将结果通过hook输出。

需要说明的是,本公开实施例中,http://ip:9000/中的ip为宿主机的ip,如127.0.0.1,具体根据宿主机的ip进行确定,本公开实施例对此不加任何限定,后续不再赘述。

在第二个示例中,以插件助手为例,若容器的端口映射信息为http://ip:9000/helper,在接收到http://ip:9000/auth访问请求时,根据访问的url进行路由匹配,匹配到helper函数。参考图2所示,当用户填入作者,名称(即插件名称),参考(即漏洞参考的网址),服务(通常为cmc名称),目标(即测试的网址),payload,flag(即返回内容的关键字),漏洞级别,判断方式,发送方式,post数据,cookies的值,retcode(即http返回状态码)时,均会调用helper函数去实现自动补充到前端模板(如图2中右侧所示的模板)中。通过指定一些特殊的字符,从而快速使用python形成一个完成的插件或脚本。在形成完整的插件或脚本之后,点击“运行”跳转至第一个实施例所描述的界面,以对插件/脚本进行测试运行,并将结果通过hook输出。

在第三个示例中,以认证转让为例,若容器的端口映射信息为http://ip:9000/auth,以post方式请求,data数据包括请求目标,指定的请求头,通过状态码来判断是否请求成功。

请求:

返回:

200代表成功返回请求的数据

409代表参数异常返回原因

502代表无法访问url返回原因

具体的,在接收到用户的http://ip:9000/auth访问请求时,根据访问的url进行路由匹配,匹配到helper函数。进而,将请求中的headers的值跟目标url(即http://httpbin.org/get)拼接之后带入到auth函数。在auth函数中使用request进行发包,根据返回的响应码跟元组做判断。如果响应码为200,证明成功,并会返回请求的数据;如果响应码为409,证明请求headers中参数异常;如果返回的响应码为502,证明无法访问请求中的url,并返回原因。

在第四个示例中,以指纹验证为例,通过指定请求的目标,以及需要测试的指纹路径跟特征,通过返回的状态码加返回的列表值判断指纹路径与特征在目标url中是否匹配。

示例性的,若容器的映射端口信息为http://ip:9000/fingerprint,请求数据为:

返回:

200[]验证不通过

200[true,true]两条指纹都通过

在接收到用户的http://ip:9000/fingerprint的访问请求时,根据请求的url进行路由匹配,匹配到fingerprint函数。进而,将请求数据中fp的参数路径(image/catalog/cart.png以及catalog/view/javascript/common.js)跟目标url(即http://www.helios-bamboo.com)拼接之后带入到fingerprint函数。在fingerprint函数中使用hackhttp进行发包,根据返回的响应码跟元组做判断。如果响应码为200并且有元组值为true,证明指纹验证成功;如果响应码为200但没有元组值,证明指纹验证失败。

在第五个示例中,以burp功能为例,

d、burp接口

访问http://ip:9000/burp

请求:

返回:

200""不成功

200"http/1.1200ok"

在接收到http://ip:9000/burp的访问请求时,根据data中的url,进行路由匹配,最终匹配到burp函数。进而,将请求数据中raw中数据带入到burp函数,在burp函数使用hackhttp请求发包。根据返回的响应码跟响应头做判断。如果响应码为200并且有响应头,证明成功;如果仅有响应码200,则证明失败。

本公开实施例提供的基于docker的测试方法,基于应用容器引擎docker构建容器测试环境;在所述容器测试环境中运行python测试用例;获取所述python测试用例的测试结果。通过使用docker建立与外界隔离的运行环境,在容器中运行python测试用例,解决因第三方库的代码开源性而存在安全风险的问题。同时,使用python的特性将请求的相对路径与对应的函数上绑定,用函数来实现特定url请求的功能,实现了包括插件助手,插件沙盒,指纹验证,认证转发,burp功能,相比于现有开源的方法实现,上述功能可以直接使用。

基于上述图1对应的实施例中所描述的基于docker的测试方法,下述为本公开装置实施例,可以用于执行本公开方法实施例。

本公开实施例提供一种基于docker的测试装置,如图3所示,该基于docker的测试装置30包括:构建模块301、运行模块302、获取模块303;

构建模块301,用于基于应用容器引擎docker构建容器测试环境;

运行模块302,用于在容器测试环境中运行python测试用例;

获取模块303,用于获取python测试用例的测试结果。

在一个实施例中,构建模块301用于利用dockerfile构建docker镜像,并通过运行docker镜像启动容器。

在一个实施例中,运行模块302包括:

获取子模块3021,用于获取url访问请求,url访问请求包括端口映射地址、函数路径信息中的至少一个;

匹配子模块3022,用于对url访问请求进行路由匹配,获取与url访问请求对应的函数;

获取子模块3021,用于获取待测试信息,待测试信息包括待测试程序、待测试目标url、待测试参数中的至少一个;

运行子模块3022,用于根据待测试信息调用并运行函数。

在一个实施例中,获取模块303,用于采用挂钩hook机制获取python测试用例的测试结果。

本公开实施例提供的基于docker的测试装置,基于应用容器引擎docker构建容器测试环境;在所述容器测试环境中运行python测试用例;获取所述python测试用例的测试结果。通过使用docker建立与外界隔离的运行环境,在容器中运行python测试用例,解决因第三方库的代码开源性而存在安全风险的问题。同时,使用python的特性将请求的相对路径与对应的函数上绑定,用函数来实现特定url请求的功能,实现了包括插件助手,插件沙盒,指纹验证,认证转发,burp功能,相比于现有开源的方法实现,上述功能可以直接使用。

基于上述图1对应的实施例中所描述的基于docker的测试方法,本公开实施例还提供一种基于docker的测试设备,该测试设备包括处理器和存储器,存储器中存储有至少一条计算机指令,指令由处理器加载并执行以实现图1对应实施例所描述的基于docker的测试方法中所执行的步骤。,

基于上述图1对应的实施例中所描述的基于docker的测试方法,本公开实施例还提供一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:readonlymemory,rom)、随机存取存储器(英文:randomaccessmemory,ram)、cd-rom、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1对应的实施例中所描述的基于docker的测试方法,此处不再赘述。

本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1