• 13
  • 13
分享
  • 从功能到接口,原来技能可以通用!——软件测试圈
  • 曼倩诙谐 2021-08-26 09:59:01 字数 2422 阅读 1826 收藏 13

  一、什么是接口业务安全测试

  业务安全测试是根据业务需求,针对业务安全规则展开的系统功能测试。业务安全测试作为在系统功能测试的重要组成部分,在接口测试过程中同样适用。区别于系统漏洞扫描、SQL注入防范等技术安全测试,针对接口展开的业务安全测试更加关注程序逻辑本身对于保障业务规则安全所进行的检查、校验、控制等功能方面的测试,例如银行业务中针对客户信息有效性、账户信息一致性的检查等等。

  二、为什么要做接口业务安全测试

  顾名思义,业务安全测试的目的自然是为了防范业务风险,提高接口的业务安全性。之所以针对接口测试再次强调业务安全测试,就不得不提到一个众所周知的“零信任原则”。

  所谓零信任原则就是后端系统对于前端提供的请求报文保持不信任。简单讲就是作为后台服务方,时刻保持一种“总有前台想要害朕”的“迫害妄想症”,认为前端送过来的报文都是不靠谱的。

  当然并不是说前端的系统真的不靠谱,很多系统前台都针对业务规则展开了细致的检查、控制,这也是我们在进行系统功能测试过程中最常设计的测试场景。那么我们为什么还要在接口测试中针对业务安全再展开一次测试呢?那是因为前后端系统调用过程中,特别是对客服务系统前后端交互过程中涉及报文拼装、传输等环节,很可能被别有用心的“坏人”利用,对报文进行篡改,从而产生业务风险。在一些交易场景中后端系统又很难辨别接收到的报文是否被篡改,因此需要对输入信息进行必要的检查校验,以提高业务安全性——当然可以通过各种技术手段对报文进行防篡改控制,这是技术安全层面的内容,这里不再展开。

  在业务安全测试过程中,我们经常提到的就是“越权访问”。

  举个栗子,一个用户登录系统之后查询自己的账户信息,这是一个正常流程。如果这个过程中,用户通过篡改报文将自己的账号更换为其他人的账号,从而获得了其他人的账户信息,这就是越权访问中的“水平越权”。即用户利用系统缺陷访问了其他相同权限用户的私有数据。

1-1.png

  与之相伴的还有“垂直越权”,即用户通过身份冒充等方法获取了诸如管理员权限等高于自身级别访问能力的越权。

1-2.png

  三、怎么做接口业务安全测试

  1.需求分析

  既然是业务安全测试,“业务”需求分析是必不可少的。同系统功能测试一样,针对接口的业务安全测试也要我们根据业务需求提炼业务规则、梳理权限要求、设计测试场景。但由于接口的抽象性,我们还需要另一个十分重要的资料来帮助我们设计测试案例,那就是接口设计文档。

  接口设计文档,一般应包括以下几部分内容:

  ·接口功能简介

  对接口基本功能的简单介绍。

  ·输入输出参数说明

  这部分内容包括了接口参数的字段类型、长度、取值范围等信息,是我们使用边界值等方法设计案例的重要信息来源。

  同时还有一个接口设计原则需要我们重点关注,即“最小必需”原则。这里的最小必需原则可以从两方面去理解。一方面,就接口的输入来说,就是尽量少的从前端特别是依靠用户录入的方法获取输入信息。这一点是同前面提到的“零信任”迫害妄想症一脉相承的——录入的东西不靠谱,能通过后端系统从数据库里获取的就不要前台录入。另一方面,接口的输出在满足需求的情况下尽量减少冗余信息,从而避免不必要的信息暴露。是否满足最小必需原则也是我们在进行接口业务安全测试的时候需要关注的。

  ·接口功能规则描述

  这里应该描述了接口的主要功能、业务规则等,是我们设计场景案例的重点参考。

  ·错误信息描述

  在进行接口业务安全测试时,为验证各种业务规则和权限控制,反向案例会占据很大比例。因此报错信息的描述是我们应该十分关注并需要在测试过程中同开发持续交流的内容。毕竟我们怎么知道案例预期结果里我们想要的报错信息就是我们想要的呢?哈哈。

  2.案例设计

  总结上面的描述,接口业务安全测试案例的设计可以从以下几方面着手:

  ·验证正向功能是否符合预期。

  ·边界值、等价类等方法对于接口参数的边界值、异常值进行测试,验证接口的容错能力。

  ·根据业务规则设计相应的反向案例,检查接口是否具备对应有效的控制逻辑。

  ·设计越权案例,检查身份校验、权限控制相关检查是否完备。

  3.测试工具

  针对接口测试,当下有Postman、Jmeter、Selenium等一众报文及自动化测试工具可供选择,可以根据需要和习惯选取。

  四、谁来做接口业务安全测试

  接口业务安全测试应该有谁来执行呢?让我们从两个方面来看这个问题:

  接口消费方 vs 接口服务方

  作为调用接口的消费方,应该对接口提出明确的功能需求,就像业务人员向开发人员提出系统功能需求一样。因此消费方在测试过程中更关注接口功能是否满足需要。

  作为提供接口的服务方,提供的接口不光要满足服务方的功能需求,还应在输入合法性、业务规则、权限控制、身份认证等方面进行相应校验,提高接口的业务安全性。

  因此从系统层面来看,接口业务安全测试应该是由服务方来完成的。

  测试 vs 开发

  在一个项目流程中,提到接口测试,往往联想到模块逻辑层面的调度调试,想到单元测试,是开发者的工作。然而,我们这里谈到的接口业务安全测试,是站在业务规则的视角针对接口展开的功能测试。接口业务安全测试同单元测试的区别就如同系统功能测试和集成测试的区别一样,测试和开发的关注点是不同的。因此接口业务安全测试和接口单元测试是不能相互替代的。

  另一方面,为提高接口业务安全质量,在接口设计上也需要开发多动些脑筋。比如接口的“最小必需”原则,就应该在接口设计阶段予以考虑,并同测试保持沟通。如果等到交付测试才思考这个问题,往往木已成舟,修改难度较大了。

  当前,随着软件系统架构、技术的不断升级优化,对于系统测试环节的要求也越来越高,系统功能测试、系统性能测试、技术安全测试、业务安全测试、接口测试等等划分愈发精细,不断考验着我们测试人员的能力与智慧。



作者:刘建伟   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 作为一名合格的软件测试工程师,哪些技能是最需要及时掌握的?基本测试技能:1、测试用例测试用例是测试的根本,良好的测试用例,对测试起到的作用不言而喻。所以对于一个有一定基础的测试新人,应首先学习如何编写合理、有效的测试用例,同时,高效的执行测试用例,也是可以思考的问题。2、测试方法测试的方法有很多种,每种方法如何使用,使用的技巧,应做为一个重点去学习,毕竟快速、尽量多的发现BUG,是测试人员工作中重要的一个环节。3、测试工具自动化测试工具、测试管理工具、配置管理工具、其它测试辅助工具的使用,有一定的了解,能使用它提高测试工作的效率。4、业务知识(需求理解)能快速了解被测程序的业务知识及功能使用。...
            0 0 1176
            分享
          • 测试驱动开发可以在很多环节里体现,同样,我们也可以主观地把TDD的思维运用到各个环节当中去。相信对敏捷熟悉的朋友对测试驱动开发(TDD)的概念都不会陌生。测试驱动开发强调通过预定义的测试标准驱动开发写出符合标准的代码。不过现在越来越多人会把TDD等同于单元测试驱动开发,即UTDD。我并不否认UTDD的价值,不过我更想强调应该把TDD当作一种思维。TDD的思维其实非常合理,做任何事情都应该有一个预期的目标和标准,如果目标和标准不清晰,就很难确保产出的价值。“The original description of TDD was in an ancient book about programmi...
            0 0 1000
            分享
          •   随着移动互联网时代的发展,自动化测试越来越成为企业刚需,软件测试的门槛已经不再低了。所以想要在这行业走得更远,走得更高并不容易,接下来按照粉丝的需求,给大家补充一些自动化测试方向的资源,如果你有补充可以在后面留言。  一、要学习一门语言  随着移动互联网发展,IT技术公司对IT人员的要求也越来越高,作为测试人员必须要学会一门语言(java或python或者GO),并通过该语言能够在工作当中开发一些脚本或工具,帮助我们提高工作的效率。  二、要学习自动化测试框架  在学会一门语言之后,进行深入的学习对应语言的自动化测试框架,比如web的自动化框架selenium、app的自动化框架appiu...
            0 0 930
            分享
          •   前言  在学习计算机操作的系统的时候,分页存储管理与分段存储管理十分容易令人混淆,对其含义进行详细解读,能够加强我们对存储管理的整体理解。  存储管理  存储管理的对象是主存储器(主存、内存)。存储器能够存放各种信息,是计算机系统中的关键资源。其主要功能包括分配和回收主存空间、提高主存利用率、扩充主存、对主存信息实现有效保护。  存储管理的主要目的是解决多个用户使用主存的问题。分页存储管理、分段存储管理是两种重要的管理方案。  分页存储管理  将一个进程的地址空间划分成若干个大小相等的区域,称为页。  相应地,将主存空间划分成与页相同大小的若干个物理块,称为块或页框。为进程分配主存时,可将...
            0 0 869
            分享
          •   有没有遇到这样的一个场景:你在使用浏览器进行web应用测试,但是你想知道你在测试过程中的前端输出和后端响应的情况究竟如何。那么,你会怎么做呢?想必大多人会毫不犹豫地回答:通过浏览器console面板和network面板抓取信息啊!的确如此,这不失为一个好办法。  但是,这难道需要时时刻刻地关注面板输出吗?这实在是有碍测试效率啊。那么,有什么办法,既不阻碍测试效率,也能获取到相应的信息呢?  答案当然是肯定的。  不得不说的ResourceSaver  有这么一个浏览器插件,它可以记录你在浏览器上的所有操作(例如,点击、输入等),提供了css、js、img和xhr等资源的下载,能够帮助你进行...
            0 0 1507
            分享
      • 51testing软件测试圈微信