一种针对B/S架构安全软件的自动化测试方法
技术领域
本发明公开一种针对B/S架构安全软件的自动化测试方法,属于软件自动化测试领域。
背景技术
强制访问控制(MandatoryAccessControl--MAC),用于将系统中的信息分密级和类进行管理,以保证每个用户只能访问到那些被标明可以由他访问的信息的一种访问约束机制。强制访问控制主体通常指用户,或代表用户意图运行进程或设备,是访问操作的主动发起者,是系统中信息流的启动者,可以使信息流在实体之间流动。主体有时也会成为访问或受控的对象,如一个主体可以向另一个主体授权,一个进程可能控制几个子进程等情况,这时受控的主体或子进程也是一种客体,客体通常是指信息的载体或从其他主体或客体接收信息的实体。
B/S架构即浏览器和服务器结构。在这种结构下,用户工作界面是通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。B/S架构的强制访问控制安全软件,是指在主机的内核层增加文件、进程、注册表的强制访问控制规则,使得用户对文件、进程、注册表进行访问时受到对应规则约束,从而达到安全防护目的的软件,且规则的配置过程是通过web界面完成。
而强制访问控制安全软件的测试需要在web界面配置规则,然后在服务器上进行文件读、写、删除等操作,二者需要交叉操作,消耗大量时间和精力;客体和权限组合复杂,验证难度大,但是现有的自动化工具大多基于录制,维护成本较高,无法很好的进行双机交叉操作。本发明提出一种针对B/S架构安全软件的自动化测试方法,通过对B/S架构安全软件的强制访问控制规则配置接口API化,使其可以被Python脚本程序调用,在无需与安全软件开发人员沟通的情况下即可顺利进行,且实现方法简单;在此基础上整理参数格式文档后,配合开源的自动化测试管理框架,可使无开发经验的测试人员完成自动化用例编写和维护,减小了用例编写和管理难度,解决了双机交叉操作难以自动化的问题,同时支持分布式自动化用例执行,节约了时间;也可以对Windows和Linux系统完美兼容,减小了自动化系统复杂度,更加方便测试人员部署、使用;同时如安全软件后续版本对web接口进行小的调整,只需略微修改规则配置方法内部实现即可,用例仍可正常使用,减小了维护成本。
发明内容
本发明针对现有的自动化强制访问控制安全软件的测试工具大多基于录制,维护成本较高,无法很好的进行双机交叉操作的问题,提供一种针对B/S架构安全软件的自动化测试方法,具有自动化转化迅速、跨平台、易于使用、支持分布式自动化用例执行的优点。
本发明提出的具体方案是:
一种针对B/S架构安全软件的自动化测试方法,通过对B/S架构安全软件的强制访问控制规则配置接口API化,被Python脚本程序调用;通过强制访问控制软件服务端所在系统部署的远程系统命令接收执行程序,使远程强制访问控制规则的验证操作在本地脚本程序中完成;
强制访问控制规则配置接口API化的实现过程为:抓取每个强制访问控制规则配置操作的HTTP请求,抽取需要输入的参数形成API接口;使用python脚本发送强制访问控制规则配置HTTP请求报文完成后,验证规则是否生效;
远程系统命令执行程序在本地脚本程序中的实现过程为:利用发送端和接收端,接收端运行在安全软件服务端,接收端创建socket对象,绑定本机端口,监听端口,等待发送端的连接请求,获取连接请求的socket对象,创建连接处理线程,向线程函数传入连接请求的socket对象,直到用户终止进程,否则继续返回调用连接请求的socket对象;
发送端运行在本地,发送端调用socket对象,向接收端发起连接请求,发送命令数据,接收返回的数据,如接收到结束符退出循环,关闭socket,将接收到的返回数据返回,否则继续接收返回数据。
所述HTTP请求包括:请求方法、URL、请求头、提交的数据;抽取的输入参数包括IP、端口、sessionID、Action为实际配置动作、Data为提交的数据。
所述HTTP请求在API内部根据Action进行分支判断,确定具体的URL、请求方法及请求头中的其他数据,确定Data的具体格式,进行HTTP请求报文的组装。
所述HTTP请求报文的组装过程为:向规则配置API接口传入抽取输入的参数,根据Action进行分支判断,确定请求头cookie中的sessionID值,完成HTTP请求头和数据构造,根据给定的IP和端口建立HTTP连接,发送构造好的HTTP请求,接收HTTP请求响应数据并转存,关闭HTTP连接并将响应数据返回。
所述Action进行分支判断的过程为:根据Action的参数,确定URL的实际配置操作确定的相对路径,确定请求方法及请求方法中的其他参数,将Data参数值转化为相应的用户文件规则实际请求的数据格式。
所述Action进行分支判断时当Action为addFileUser,则URL为/Rule/addFileUser.action,请求方法为POST,然后确定请求头中的其他参数,将Data参数值转化为添加用户文件规则实际请求的数据格式;或者当Action为getFileUser,则URL为/Rule/viewFileUser.action,请求方法为GET,然后确定请求头中的其他参数,将Data参数值转化为获取用户文件规则实际请求的数据格式,拼装在URL尾部。
连接处理线程处理连接请求的socket对象的过程为:调用连接请求socket对象的recv方法计算远程命令,通过recv方法返回值判断是否有数据可接收,若无,则连接处理线程结束,若有,则执行远程命令并返回命令执行的输出,构造返回数据,调用socket对象的sendall方法将构造好的返回数据发送出去后继续调用连接请求socket对象的recv方法接收远程命令。
利用Popen方法执行远程命令并返回命令执行的输出,则输出为标准输出和出错输出,若出错输出为空,设置标记为0,否则设置标记为1,标记为1时构造返回数据,调用socket对象的sendall方法将构造好的返回数据发送出去后继续调用连接请求socket对象的recv方法接收远程命令。
本发明的有益之处是:本发明在无需与安全软件开发人员沟通的情况下即可顺利进行,且实现方法简单,可快速完成规则配置接口的API化。在此基础上整理Action和Data对应的参数格式文档后,配合开源的自动化测试管理框架,可使无开发经验的测试人员完成自动化用例编写和维护,减小了用例编写和管理难度,解决了双机交叉操作难以自动化的问题,同时支持分布式自动化用例执行,节约了时间;远程系统命令执行程序也可以对Windows和Linux系统完美兼容,减小了自动化系统复杂度,更加方便测试人员部署、使用;同时如安全软件后续版本对web接口进行小的调整,只需略微修改规则配置方法内部实现即可,用例仍可正常使用,减小了维护成本。
附图说明
图1强制访问控制规则配置API接口实现流程示意图;
图2远程系统命令执行程序接收端实现流程示意图;
图3远程系统命令执行程序接收端的连接处理线程工作流程示意图;
图4远程系统命令执行程序发送端实现流程示意图。
具体实施方式
结合附图对本发明做进一步说明。
B/S架构的强制访问控制安全软件,是指在主机的内核层增加文件、进程、注册表的强制访问控制规则,使得用户对文件、进程、注册表进行访问时受到对应规则约束,从而达到安全防护目的的软件,且规则的配置过程是通过web界面完成。robotframework是一款python编写的功能自动化测试开源框架,支持关键字驱动,测试人员可以使用Python创建自己需要的测试库,robotframework通过加载测试库抽象出关键字,用户使用关键字来进行用例的编写和执行。
一种针对B/S架构安全软件的自动化测试方法,通过对B/S架构安全软件的强制访问控制规则配置接口API化,被Python脚本程序调用;通过强制访问控制软件服务端所在系统部署的远程系统命令接收执行程序,使远程强制访问控制规则的验证操作在本地脚本程序中完成;
强制访问控制规则配置接口API化的实现过程为:抓取每个强制访问控制规则配置操作的HTTP请求,抽取需要输入的参数形成API接口;使用python脚本发送强制访问控制规则配置HTTP请求报文完成后,验证规则是否生效;
其中HTTP请求包括:请求方法、URL、请求头、提交的数据;
请求方法主要根据实际配置操作内容确定,比如获取规则表操作,一般为GET,添加、删除、修改规则一般为POST;
URL中主要由IP、端口、根据实际配置操作确定的相对路径组成;
请求头中主要可变参数为cookie中的sessionID,referer等,其中使用sessionID可规避登录界面验证码等问题,其他参数一般比较固定;
提交的数据,即Data,主要根据实际配置操作内容确定。
抽取的输入参数包括IP、端口、sessionID、Action为实际配置动作、Data。Action根据实际操作动作自行命名,比如添加文件强制访问规则定义为addFileUser,Data根据Action进行变化,数据结构封装为统一格式,可以利用python字典格式,以减小接口的复杂度。
HTTP请求在API内部根据Action进行分支判断,确定具体的URL、请求方法及请求头中的其他数据,确定Data的具体格式,进行HTTP请求报文的组装。
参见图1,以Action为addFileUser或者Action为getFileUser为例,HTTP请求报文的组装过程为:向规则配置API接口传入参数,根据Action进行分支判断,当Action为addFileUser,则URL为/Rule/addFileUser.action,请求方法为POST,然后确定请求头中的其他参数,通常确定其可变参数referer,将字典类型Data参数值转化为添加用户文件规则实际请求的数据格式;或者当Action为getFileUser,则URL为/Rule/viewFileUser.action,请求方法为GET,然后确定请求头中的其他参数,通常确定其可变参数referer,将字典类型Data参数值转化为获取用户文件规则实际请求的数据格式,拼装在URL尾部;
然后确定请求头cookie中的sessionID值,完成HTTP请求头和数据构造,根据给定的IP和端口建立HTTP连接,发送构造好的HTTP请求,接收HTTP请求响应数据并转存,关闭HTTP连接并将响应数据返回。
远程系统命令执行程序在本地脚本程序中的实现过程为:利用发送端和接收端,接收端运行在安全软件服务端,接收端创建socket对象,绑定本机端口,监听端口,等待发送端的连接请求,获取连接请求的socket对象,创建连接处理线程,向线程函数传入连接请求的socket对象,直到用户终止进程,否则继续返回调用连接请求的socket对象;
参考图2,其中接收端实现的过程为:利用socket方法创建socket对象,使用bind方法绑定例子中本机的8111端口,不与常用端口冲突即可,使用Listen方法监听,设置接收请求的数量,例如为10,即可同时接收10个连接请求,调用accept方法获取连接请求的socket对象,调用thread的start_new_thread建连接处理线程,向线程函数传入连接请求的socket对象,直到用户终止进程,否则继续返回调用连接请求的socket对象;
参考图3其中连接处理线程处理连接请求的socket对象的过程为:调用连接请求socket对象的recv方法计算远程命令,通过recv方法返回值判断是否有数据可接收,若无,则连接处理线程结束,若有,则执行远程命令并返回命令执行的输出,为了使命令执行结果的判断更方便,同时兼容Windows和linux,在此利用Popen方法执行远程命令并返回命令执行的输出,则输出为标准输出和出错输出,若出错输出为空,设置标记为0,否则设置标记为1,标记为1时构造返回数据为:status:标记/noutput:\nPopen方法的返回值\n###,Popen返回的元组类型的前100个字符###。开头增加标记信息以标识命令执行是否成功,结尾增加结束符###以方便发送端进行结束判断,截取Popen返回值的前100个字符可以为了防止超长返回值带来的处理不便;
再调用socket对象的sendall方法将构造好的返回数据发送出去后继续调用连接请求socket对象的recv方法接收远程命令。
参考图4发送端运行在本地,传入参数为IP、端口和命令,内部实现过程为:调用socket模块的socket方法创建socket对象,调用connect方法向接收端发起连接请求,连接成功后调用sendall方法发送命令数据,调用recv方法接收返回数据,如接收到###结束符时退出循环,调用close方法关闭socket,将接收到的返回数据返回,否则继续接收返回数据。
应用中首先在Linux服务器IP为10.1.1.2,部署B/S架构的强制访问控制安全软件,假设Web服务与软件服务端绑定在同一IP上,web服务端口为8443,然后运行远程系统命令执行程序接收端脚本,其中Windows系统需安装python解释器,linux系统自带。本次实施采用robotframework自动化测试开源框架,使用python语言。
然后在浏览器中打开安全软件的web配置界面并登录,然后使用浏览器的开发者工具查看请求cookie中的sessionID值,假设为b9a941af87e36717。
在本地PC上,IP为10.1.1.3编写python脚本。调用规则配置方法,即利用本发明方法进行接收端的HTTP请求组装,传入参数:IP为10.1.1.2,端口为8443,sessionID为b9a941af87e36717,其中Action为addFileUser,Data为{'user':'ANY_USER','filename':'/autotest','rule':['ReadOnly']},即所以用户对文件/auotest只有读权限。通过返回值判断是否配置成功,假设成功。然后调用远程系统命令执行程序发送端方法,传入参数:IP为10.1.1.2,端口为8111,命令为echohaha>>/autotest,即在文件/autotest最后追加写字符串haha,然后查看返回结果中的status的标记,如果为1则表明echo命令执行失败,规则配置正常生效,如果为0则表明echo命令执行成功,规则配置未正常生效。至此完成一个简单的自动化用例。