Tech

   导读   

本文旨在站在测试开发工程师的角度将功能安全测试归入日常测试中,简单剖析了功能安全测试与功能测试的异同点以及SDL中各环节的职责所在,同时分析了针对不同的安全场景如何进行功能安全测试用例的设计。通过本文,读者可以对SDL有一个简单明了的理解,针对SDL中各个环节,产研测的职责和关注点是什么都能有一个明确的概念。通过阅读本文,可以重点关注如何结合实际功能安全点设计符合需求的功能安全测试用例。

00

前言   

测试开发工程师一直想将安全测试真正融入测试工作中,在测试工作过程中,测试工程师一般会更加注重对于功能的测试,对于安全测试,关注度则较低。直到前不久众所周知的用户信息泄露问题的发生,人们才真正的意识到安全测试的重要性。一提起软件安全,大部分人首先想到的都是信息泄露,无论是通过购物平台泄露,还是在浏览网页信息,好像都无法避免信息的泄露。

其实,除了信息泄露,在软件的整个开发和使用过程中,都有可能存在安全隐患,比如,数据库信息的泄露,黑客恶意攻击,后台的数据篡改等。与其他岗位的人不同的是,测试工程师不仅要知道信息泄露,在软件开发周期中所有环节可能涉及的安全问题也是测试工程师需要一并关注的问题。那什么是安全测试?为何进行安全测试?在工作过程中,如何开展安全测试呢?那接下来,就此好好聊聊吧!

01

 What?Why?

1.1 What?--请问什么是安全测试呢?

安全测试是在软件产品开发基本完成时,验证产品是否符合安全需求定义和产品质量标准的过程。安全测试是检查系统对非法侵入渗透的防范能力。

1.2 Why?--为什么进行安全测试呢?

1)进行安全测试,原因之一是为了提升IT产品的安全质量;

2)同时,也是为了尽量在发布前找到安全问题予以修补降低成本;

3)验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵,不受各种因素的干扰。

02

安全测试的目标  

安全测试的目标就是要通过对系统进行精心、全面的脆弱性安全测试,发现系统未知的安全隐患并提出相关建议,确保系统的安全性。主要分为应用程序级别系统级别的安全测试两类。

图1 安全测试目标

03

安全测试与功能测试的区别  

安全测试与功能测试,同属于测试工作的范畴,那二者必然有相同和不同之处,从大量相关测试经验中可以总结出安全测试与功能测试的相同点和不同之处:

Same

Summary
Detail
目标类似 都是尽早反馈系统的缺陷
过程类似 了解需求→设计并编写用例→用例评审→测试用例执行→产出测试报告
提前预测 会对不同的业务场景有目的的进行探索,对研发代码时刻保持警惕

Different

Summary 功能测试 安全测试
目标不同 发现设计、编码等产生的BUG 发现安全隐患
问题发现模式不同 违反功能定义为判断依据 违反权限与能力的约束为判断依据
预测内容不同 以系统所具有的功能为思考域 要预测安全隐患

04

安全测试的基本过程

4.1 安全开发生命周期

SDL( Security development lifecycle 即安全开发生命周期,是微软提出的从安全角度指导软件开发的过程。将安全的考虑集成在软件开发的每一个阶段,利用威胁模型改进安全流程。

图2 SDL流程

一个完整的安全开发流程包含从需求调研到运维整7个阶段,每个阶段都有其相应的安全职责。通过下图可以很清晰的看到每个阶段的职责所在。

需求阶段和培训阶段,是产品同事需要关注的阶段。在需求阶段,产品人员需要通过需求调研对此次需求中涉及到的安全点进行评估,并将安全需求点落实到prd中。如,京喜达财务系统,网格站代理佣金需求中,页面需要展示财务结算同事的姓名,电话,邮箱信息等敏感信息,产品需要将此需求在安全说明部分进行声明。在培训阶段,需要对该功能的使用者进行线上或线下的相关培训,培养他们的安全意识等。

设计研发阶段,是需要研发同事关注并做到的,他们在开发设计过程中需要对prd中的安全点考虑在内,包含对可能的攻击面的分析和安全API以及组件的开发等。

测试阶段,是测试同事需要格外关注的阶段。在这个阶段,研发同事的工作已经完成,测试同学介入,需要在全面的测试展开前,就应该提前对prd进行梳理,预测可能存在的安全问题,将其落实到测试case中,防止测试点遗漏,还需要组织相关人员对此进行用例评审,在测试展开过程中,需要对此次需求的安全点进行验证,同时还要保证,本次的改动点不会影响其他功能的正常使用。最后需要输出一份测试报告。

上线阶段,测试和研发一起关注。在此阶段,研发和测试同学需要关注上线的过程中是否会出现问题,要进行安全漏洞的监控与扫描,保证上线过程中不会出现漏洞,同时,还需要编写一份应急方案,方便运维等人员的使用。

运维阶段,是运维同事需要关注的阶段。在此极端,需要定时进行安全巡查,保证软件在使用过程中不会出现安全问题,一旦出现安全问题,在执行应急方案的同时,需要对此情况进行上报,与研发一起解决这个安全问题。

4.2 安全测试流程

图3 安全测试流程

05

常见安全测试的验证点

1.1 What?--请问什么是安全测试呢?

序号 功能安全测试验证点 详细说明
1 业务逻辑漏洞

1、金额数据、商品数量篡改

2、最大数限制修改

3、修改金额,如无后端校验情况下,0.01元买到了价值100元的商品

2 登录与身份验证

1、用户名与密码不一致时进行校验,无法登陆

2、验证码未限制一次性使用

3、验证码可无限次获取--造成短信轰炸

4、密码有提示--生日+身份证后几位等

5、修改密码时校验原密码--新密码与原密码不可一致

6、流水号有规律--其余用户可根据此规律遍历获取数据

7、重复注册与登录--同一个用户名注册多次和重复登陆

8、缺少账号密码锁定机制(无限次重试)

9、密码强度--大小写and特殊字符and长度

3 越权测试

1、手动更改url的参数访问无权访问的页面(http)

2、拿到更高权限人员的账号和密码,通过接口调用等方式进行操作

3、人员权限和数据权限思虑周全(总部和省区权限不同等)

4 文件上传与下载

1、文件上传次数不做校验,使得恶意上传,沾满资源池

2、文件的类型和大小不做控制

3、任意文件均可下载,导致有木马病毒等(对于有安全隐患的不应该允许下载)

4、可以通过../../等方式跳转到其他目录获取相关重要文件

5、不登录系统,直接输入文件url可直接下载

5 敏感信息

1、数据库/日志/提示等泄露

2、人员的邮箱电话等信息(如数据库加密,页面脱敏)

3、使用https密文传输,非http明文传输

6 Sql注入

1、get型注入

2、post型注入

3、cookie型注入

4、登录认证型注入

7 重要数据 重要文件附加水印

06

举例说明如何进行功能安全测试

在测试过程中,要转换看问题的视角,在测试过程中,要将自己定位为恶意破坏规则的用户,以破坏的视角看待问题。同时,无论是在理解prd还是编写测试用例的时候,要以专业的态度识别出其中有价值的数据。

如下面两张图,在测试过程中,要时刻站在左图种右边的角色--恶意用户的立场去考虑场景,思考面对这样的功能,他会以什么方式破坏系统。同时,在看待prd中的功能点时,要多角度考虑问题,既要考虑到它的好处,同时也要考虑到它是否存在安全隐患,如从不同角度看待问题,会有不同的结果(如右图,可以看到两个人脸,或者一个台子)。(图片来源于网络)

图4 不同视角看问题

在阐述如何进行功能安全测试用例编写之前,先简单介绍下公司组织架构,公司组织架构由上到下分别为总部→区域→加盟网点或网格站。同时,总部、区域人员细分各个岗位,各岗位分别负责不同的相关工作。

图5 组织架构简图

接下来,以工作中涉及的相关需求测试举例说明,在功能安全测试方面,如何进行功能安全测试用例编写与测试工作:

以案例一为例,说明如遇到权限问题时,测试用例该如何设计:

案例一 报价提报流程线上化

需求背景:省区报价人员对不同的网格站配置不同的报价,以实现对加盟网点产生的费用进行收取和支付款的功能。目前区域提报网格站的报价流程是区域线下邮件申请,总部进行线下邮件审核,为了提高区域提报报价的审批效率,急需报价线上化审批功能。该需求中涉及到的主要功能有:

1、省区报价岗位可以提报报价、编辑及变更自己提报的报价;

2、有报价审批权限的人员(含省区和总部的部分人员)可以审核、查看报价,审核过程中可对报价部分内容进行修改;

3、邮件通知报价提报人员、省区相关负责人进行报价确认;

4、相关网格站进行报价确认。

面对这个需求,首先要充分分析prd,应该想到的是该需求涉及的人员角色巨多,且每个角色有着对报价的不同的权限,因此,在考虑测试用例时,要充分考虑人员的权限问题,如网格站除报价确认和接收邮件外无任何权限,若研发将报价审批的权限赋予了他或者校验不严谨则可能会使得黑客篡改权限,则存在流程被恶意审批的存在,因此测试用例可以这样设计:

图6 权限相关测试用例示例

以案例二、三为例,简单说明遇到有重要数据和敏感信息及操作时应如何设计测试用例:

案例二 预付款提现需求

加盟网点与京东物流签约后,会生成自己的账户,加盟网点可以对其账户进行充值操作或将其账户的余额提现至银行卡。因此加盟网点的提现过程是否卡控严谨将直接关系到公司的资金利益,在梳理完提现流程prd后,可以将其中的功能安全点概括如下:

1、加盟网点存在未开发票不允许提现;

2、提现时对提现周期有限制;

3、账户余额会限制提现;

4、加盟网点状态影响提现;

5、一旦提现申请发起,应该立马扣减余额;

6、提现申请发起后,需要一系列审批才可真正提现;

7、校验提现信息的真实性、正确性。

案例三、电子合同需求

网格站与京东物流签约需要生成电子合同,其中涉及的部分功能有:省区相关人员可以新增电子合同,在新增电子合同时,需要展示合伙人的手机号和账号,还要填写履约保证金等金额,且上传对应图片(要求格式是图片格式)等文件。网格站在签署电子合同时,需要预览合同内容以及合伙人手机号,同时签署合同时还要获取验证码校验,除此,网格站人员还可以下载合同进行查看。

通过对这部分的功能梳理,可以概括以下几个测试点:

1、合伙人手机号和账号属于敏感信息;

2、过程中需要上传文件,其中履约保证金必须是图片格式;

3、签署合同需要获取验证码,验证码次数和生效时间等需要格外考虑;

4、履约保证金、合同属于重要数据和文件。

因此,结合这两个案例,我们可以这样设计测试用例并展开测试:

图7 敏感数据&操作测试用例示例

特别的,前端修改数据场景可参考下图进行测试:

图8 手动修改前端数据示例

07

总结 

随着信息社会的不断进步,信息安全的重要性日渐突出,安全测试与功能测试一样,在软件测试过程中,是一个非常重要的测试环节。在软件开发过程中进行安全测试,能够避免数据泄露等安全问题,从而保障公司及其软件的利益。然而安全测试的道路并不好走,需要更加系统和专业的技术来支撑,接下来的工作中,会将安全测试融入到测试环节中,并有序的开展安全测试工作。

秒懂上线必不可少的安全测试!相关推荐

  1. Android APP上线必不可少的应用市场!

    前言: 这段时间都在忙着开发,今天终于新版本更新了,开心,快乐!半夜了 我还不睡,那是因为我真的很想有多点自由的空余时间,还有很多东西等着我去学习的,哈哈,我真有那么勤奋了,其实没有.....半夜还不 ...

  2. APP不同上线情况对应的测试流程

    一个App软件从研发提测到版本上线都会经过哪些测试流程呢?很多人认为就是进行功能测试,没bug了就提交审核,审核通过就直接上线了,其实不然,有些步骤是需要特别关注的,否则极易造成线上bug,本文千锋教 ...

  3. 黎明觉醒火种测试服务器维护,黎明觉醒火种测试什么时候上线 黎明觉醒火种测试资格获取方式(图文)...

    黎明觉醒是腾讯旗下的多人开放世界生存手游,对标的就是网易旗下的明日之后.在之前的曙光测试之后,这款游戏长时间来都没有传出过新消息,下面game234就来介绍一下黎明觉醒最新的火种测试什么时候上线,怎么 ...

  4. 关于xcode6打包以及上线前企业部署测试的说明 --转自张诚教授微博

    xcode6如何打包 首先clean然后点击归档 点击打包 之后保存 点选第一个以后检查相关证书签名 那么我们开发完以后,在上线前如何给别人测试 有2种方法 1.使用299美金的企业开发者账号搭建企业 ...

  5. Python编程必不可少的pytest测试框架

    进行编程测试重要的是为了更高效的完成功能的实现. pytest是基于unittest实现的第三方测试框架,比 unittest 更加的简洁.高效,并且可以完美兼容 unittest 的测试代码,无需对 ...

  6. 游戏上线前服务器压力测试应该怎么做

    伴随手游上线推广,玩家爆发式增长非常常见,不少开发者都遇到过玩家冲爆服务器的情况.因此降低服务器崩溃的风险就显得非常重要.游戏上线前如果做了服务器压力测试帮助会很大.今天就来说说压力测试. 编写脚本机 ...

  7. 腾讯吃鸡 android,腾讯吃鸡手游《光荣使命》正式上线:安卓/iOS不限号测试

    IT之家11月29日消息 今天下午,腾讯首款百人战术竞技手游<光荣使命>在安卓.iOS双平台正式上线,开启全面测试.(官网下载:点此链接,双平台已开放下载.) 该游戏采用第三人称射击视角, ...

  8. 微信+WeTest:小程序云端测试系统上线

    日前,微信新增小程序测试系统,可便于开发者检测小程序缺陷,评估小程序产品质量.在小程序发布之前,开发者可将小程序代码提交到测试系统,在不同型号的手机真机上运行,执行完毕后自动生成测试报告.小程序云端测 ...

  9. Bugtags 让你的 APP 测试轻松、上线安心

    Bug 管理系统再进化 Bugtags 的创业团队,在过去几年,做了很多方向的尝试--没错,是开发了很多 APP. 每一轮迭代,都会被繁琐的 APP 测试困扰:无休止的截屏上传电脑,无数次的开发与测试 ...

最新文章

  1. win7如何设置某个软件不弹出用户账户控制
  2. 谁能搞定中国的文艺复兴,我就能搞定中国的政治改革
  3. 你真的以为了解java.io吗 呕心沥血 绝对干货 别把我移出首页了
  4. 【Java基础】Java中的char是否可以存储一个中文字符之理解字符字节以及编码集
  5. linux dig 命令使用方法
  6. C# webrequest 抓取数据时,多个域Cookie的问题
  7. $_post 数据上传到那个位置_如何实现图片上传并保存到数据库?
  8. Runtime消息动态解析与转发流程
  9. ps自动,批处理,替换原文件夹图片
  10. php红包互助源码_完整的微信红包接口API实现(php版)
  11. 微博营销有什么优势与缺点?如何利用微博开展营销?
  12. 教你用python制作人脸卡通画(附源码)
  13. ubuntu conda、pip 设置代理
  14. 2023第八届少儿模特明星盛典 小超模矫沐含 担任全球赛代言人
  15. 刷脸支付免费领取保险全额赔付保安全
  16. IG541与七氟丙烷灭火系统到底有什么不一样呢?
  17. 如果今天是生命里的最后一天你想做点啥?
  18. FastDB 应用开发指南(一)
  19. java 设置背景色_背景颜色的设置
  20. 制作U盘CDLinux使用奶瓶进行网络抓包

热门文章

  1. php手机定位导航,js实现网页定位导航功能
  2. android hal 驱动,AndroidHAL-Teseo
  3. oracle 查看统计情报,Oracle 查看收集统计信息
  4. ssh协议是osi_TCP/IP协议和三次握手四次挥手
  5. 简单介绍C语言使用四种方法初始化结构体
  6. Java 之String、StringBuffer 和 StringBuilder 三者区别介绍
  7. stc51单片机怎么学, 先掌握STC单片机程序烧录方法
  8. mysql udate 充值_分享下一个mysql的充值记录系统
  9. linux ftp 记录,linux FTP vsftpd
  10. 【分块】#6281. 数列分块入门 5(区间开方,区间求和)