您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
一起聊聊工作中的功能安全测试
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
一起聊聊工作中的功能安全测试
自猿其说Tech
2021-09-14
IP归属:未知
29960浏览
测试
作为一名测试开发工程师,一直想将安全测试真正融入测试工作中,在之前的测试工作过程中,更加注重的是对于功能的测试,对于安全测试,关注度较低。直到前不久众所周知的用户信息泄露问题的发生,才让我真正的意识到安全测试的重要性。一提起软件安全,包括我在内的大部分人首先想到的都是信息泄露,无论是通过购物平台泄露,还是在浏览网页信息,好像都无法避免信息的泄露。 其实,除了信息泄露,在软件的整个开发和使用过程中,都有可能存在安全隐患,比如,数据库信息的泄露,黑客恶意攻击,后台的数据篡改等。与其他岗位的人不同的是,我们作为测试工程师,不仅要知道信息泄露,在软件开发周期中所有环节可能涉及的安全问题也是我们测试工程师需要一并关注的问题。那什么是安全测试?我们又为何进行安全测试?在工作过程中,如何开展安全测试呢?那接下来,我们就此好好聊聊吧! ### 1 What?Why? #### 1.1 What?--请问什么是安全测试呢? 安全测试是在软件产品开发基本完成时,验证产品是否符合安全需求定义和产品质量标准的过程。安全测试是检查系统对非法侵入渗透的防范能力。 #### 1.2 Why?--为什么进行安全测试呢? 1. 进行安全测试,原因之一是为了提升IT产品的安全质量。 1. 同时,也是为了尽量在发布前找到安全问题予以修补降低成本 ; 1. 验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵,不受各种因素的干扰。 ### 2 安全测试的目标 安全测试的目标就是要通过对系统进行精心、全面的脆弱性安全测试,发现系统未知的安全隐患并提出相关建议,确保系统的安全性。主要分为**应用程序级别**和**系统级别**的安全测试两类 ![](//img1.jcloudcs.com/developer.jdcloud.com/e1cc23ff-e938-4692-8623-8c2f1771aeee20210914134309.png) ### 3 安全测试与功能测试的区别 安全测试与功能测试,同属于测试工作的范畴,那二者必然有相同和不同之处,经过这些年的测试经验,将他们的相同点和不同之处进行了归纳与总结: #### Same: ![](//img1.jcloudcs.com/developer.jdcloud.com/c2fe500e-7587-487c-8fe1-fbf27903268e20210914134330.png) #### Different: ![](//img1.jcloudcs.com/developer.jdcloud.com/e2d4065b-b11d-4c94-be39-828290fdbc5120210914134346.png) ### 4 安全测试的基本过程 #### 4.1 安全开发生命周期 SDL( Security development lifecycle )即安全开发生命周期,是微软提出的从安全角度指导软件开发的过程。**将安全的考虑集成在软件开发的每一个阶段,利用威胁模型改进安全流程。** ![](//img1.jcloudcs.com/developer.jdcloud.com/5b897690-1a41-45ff-8e28-968bd6f1f96620210914134415.png) 一个完整的安全开发流程包含从需求调研到运维整7个阶段,每个阶段都有其相应的安全职责。通过下图我们可以很清晰的看到每个阶段的职责所在。 **需求阶段和培训阶段**,是产品同事需要关注的阶段。在需求阶段,产品人员需要通过需求调研对此次需求中涉及到的安全点进行评估,并将安全需求点落实到prd中。如,京喜达财务系统,网格站代理佣金需求中,页面需要展示财务结算同事的姓名,电话,邮箱信息等敏感信息,产品需要将此需求在安全说明部分进行声明。在培训阶段,需要对该功能的使用者进行线上或线下的相关培训,培养他们的安全意识等。 **设计和研发阶段**,是需要研发同事关注并做到的,他们在开发设计过程中需要对prd中的安全点考虑在内,包含对可能的攻击面的分析和安全API以及组件的开发等 **测试阶段**,是测试同事需要格外关注的阶段。在这个阶段,研发同事的工作已经完成,测试同学介入,我们需要在全面的测试展开前,就应该提前对prd进行梳理,预测可能存在的安全问题,将其落实到测试case中,防止测试点遗漏,还需要组织相关人员对此进行用例评审,在测试展开过程中,需要对此次需求的安全点进行验证,同时还要保证,本次的改动点不会影响其他功能的正常使用。最后需要输出一份测试报告 **上线阶段**,测试和研发一起关注。在此阶段,研发和测试同学需要关注上线的过程中是否会出现问题,要进行安全漏洞的监控与扫描,保证上线过程中不会出现漏洞,同时,还需要编写一份应急方案,方便运维等人员的使用。 **运维阶段**,是运维同事需要关注的阶段。在此极端,需要定时进行安全巡查,保证软件在使用过程中不会出现安全问题,一旦出现安全问题,在执行应急方案的同时,需要对此情况进行上报,与研发一起解决这个安全问题。 #### 4.2 安全测试流程 ![](//img1.jcloudcs.com/developer.jdcloud.com/d853a368-e72e-49d0-ad92-644cc061780020210914134509.png) ### 5 常见安全测试的验证点 ![](//img1.jcloudcs.com/developer.jdcloud.com/f84bd81f-19b1-47c4-b219-33528520df2c20210914134523.png) ### 6 举例说明如何进行功能安全测试 在测试过程中,我们要转换看问题的视角,在测试过程中,我们要将自己定位为恶意破坏规则的用户,以破坏的视角看待问题。同时,无论是在理解prd还是编写测试用例的时候,要以专业的态度识别出其中有价值的数据。 如下面两张图,我们在测试过程中,要时刻把自己想象成图一种右边的角色--恶意用户,站在他的立场去考虑场景,思考面对这样的功能,他会以什么方式破坏我们的系统。同时,在看待prd中的功能点时,要多角度考虑问题,既要考虑到它的好处,同时也要考虑到它是否存在安全隐患,如从不同角度看待问题,则会有不同的结果(如图二,可以看到两个人脸,或者一个台子)。 ![](//img1.jcloudcs.com/developer.jdcloud.com/3582cf16-0eb8-4817-b816-66f377e723d720210914134543.png) 接下来,以京喜达财务相关需求测试举例说明,在功能安全测试方面,我们如何进行功能安全测试用例编写与测试工作: #### 案例一 短链报价审批流线上化 该需求中涉及到的主要功能有: 1. 区域网管经理提报报价、编辑及变更自己提报的报价 1. 省区价格岗/省区总/总部价格岗/总部网络组/总部网络组领导/总部价格岗/总部财务负责人/事业部负责人审核、查看报价,审核过程中可对报价部分内容进行修改 1. 邮件通知区域网管经理、省区网络组负责人进行报价确认 1. 网格站进行报价确认 面对这个需求,我们首先要充分分析prd,应该想到的是该需求涉及的人员角色巨多,且每个角色有着对报价的不同的权限,因此,我们在考虑测试用例时,要充分考虑人员的权限问题,如网格站除报价确认和接收邮件外无任何权限,若研发将报价审批的权限赋予了他或者校验不严谨则可能会使得黑客篡改权限,则存在报价被恶意审批的存在,因此我们的测试用例可以这样设计: ![](//img1.jcloudcs.com/developer.jdcloud.com/239c288c-a034-499d-8118-aa8c1e7b3e2020210914134631.png) #### 案例二 预付款提现需求 需求中发起提现流程如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/b3f70ee5-dd93-4eea-80ad-b0469f93333220210914140449.png) 经济网点的提现过程是否卡控严谨将直接关系到公司的资金利益,梳理上图中的提现流程,我们可以从以下几个方面进行安全测试的考虑: 1. 网点存在未开发票时不允许提现 1. 提现时对提现周期有限制--30日内不允许发起多次提现 1. 账户余额有限制--低于5000元不能提现 1. 网点状态为停用的不可以提现 1. 一旦提现申请发起,应该立马扣减预付款 展开来看,测试用例可以如下设计: ![](//img1.jcloudcs.com/developer.jdcloud.com/6d280350-25c4-4101-8aba-df5b916fb37620210914140518.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/15905795-d916-4fa1-938c-52799eb609d420210914140532.png) #### 案例三 电子合同需求 电子合同需求部分功能:网管经理可以新增电子合同,在新增电子合同时,需要展示合伙人的手机号和京东pin,还要填写履约保证金等金额,且上传履约保证金图片(履约保证金必须是图片格式)等文件。网格站在签署电子合同时,需要预览合同内容以及合伙人手机号,同时签署合同时还要获取验证码校验,除此,网格站人员还可以下载合同。 通过对这部分的功能梳理,我们可以概括以下几个测试点: 1. 合伙人手机号和京东pin属于敏感信息 1. 过程中需要上传文件,其中履约保证金必须是图片格式 1. 签署合同需要获取验证码,验证码次数和生效时间等需要格外考虑 1. 履约保证金、合同属于重要数据和文件 因此,我们可以这样设计测试用例并展开测试: ![](//img1.jcloudcs.com/developer.jdcloud.com/165ccd83-ef86-4959-9b38-99f90eff10a420210914140611.png) ### 7 总结 随着信息社会的不断进步,信息安全的重要性日渐突出,安全测试与功能测试一样,在软件测试过程中,是一个非常重要的测试环节,在软件开发过程中进行安全测试,能够避免数据泄露等安全问题,从而保障公司及其软件的利益,然而安全测试的道路并不好走,需要更加系统和专业的技术来支撑,接下来的工作中,会将安全测试融入到测试环节中,并有序的开展安全测试工作 #### 附录 - 哪些项目需要做评审https://cf.jd.com/pages/viewpage.action?pageId=312589554 - 安全评审申请模板:https://cf.jd.com/pages/viewpage.action?pageId=311564123 - 产品需求中的安全需求:https://cf.jd.com/pages/viewpage.action?pageId=106704826 - 隐私影响评估 https://cf.jd.com/pages/viewpage.action?pageId=420672152 - 安全设计与开发以及测试用例设计https://cf.jd.com/pages/viewpage.action?pageId=165598087 - SQL注入攻击常见方式及测试方法:https://blog.csdn.net/github_36032947/article/details/78442189 - sql注入实例分析:https://www.cnblogs.com/leftshine/p/SQLInjection.htm ------------ ###### 自猿其说Tech-JDL京东物流技术发展部 ###### 作者:攀登者小组(京喜达技术部 张萍)
原创文章,需联系作者,授权转载
上一篇:Elasticsearch与Clickhouse数据存储对比
下一篇:volatile保证内存可见性探究
相关文章
安全测试之探索windows游戏扫雷
Jmeter压测实战:Jmeter二次开发之JSF采样器实现
Laputa自动化测试框架介绍
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号