测试工程师多数注重功能测试,对于安全测试的关注度较低。但是,随着互联网的发展,网络环境越来越复杂,各类软件涉及的领域也越来越多,这时系统与软件的安全问题就愈加重要了。近年来,有多个知名网站频繁出现用户信息泄漏,造成重大的损失。因此,安全测试也日益为企业所重视。
一提起软件安全,大部分人首先想到的都是信息泄露,其实,除了信息泄露,在整个软件的生命周期中,都有可能存在安全隐患,例如黑客恶意攻击、数据库信息泄露、数据篡改等。那什么是安全测试?为什么进行安全测试?如何开展安全测试?接下来,跟大家分享一下~
一、什么是安全测试?
安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,验证产品是否符合安全需求定义和产品质量标准的过程。安全测试是检查系统对非法侵入渗透的防范能力。
二、为什么开展安全测试?
1、查找软件自身程序设计中存在的安全隐患;
2、检查应用程序对非法侵入的防范能力,保护系统不受到非法的侵入;
3、证明软件的安全性,根据安全指标不同测试策略也不同。
三、什么是安全开发生命周期?
SDL( Security development lifecycle )即安全开发生命周期,是微软提出的从安全角度指导软件开发的过程。将安全的考虑集成在软件开发的每一个阶段,利用威胁模型改进安全流程。
一个完整的安全开发流程包含从需求阶段到运维阶段共5个阶段,每个阶段都有其相应的安全职责,安全测试贯穿于软件的整个生命周期。
1、【需求阶段】:产品需要通过需求调研对此次需求中涉及到的安全点进行评估,并将安全需求点落实到PRD中,并在需求评审时与项目成员同步到位,提高大家安全意识。
2、【开发阶段】:开发在设计过程中需要对PRD中的安全点进行考虑,包含对可能的攻击面的分析和安全API以及组件的开发等。
3、【测试阶段】:测试需要在提测前,提前对PRD进行分析,预测可能存在的安全问题,并设计相关测试用例,防止测试点遗漏,组织相关人员对此进行用例评审,执行完用例并输出对应的测试报告
4、【上线阶段】:研发、测试、产品同学需要关注上线后的安全问题,要进行安全漏洞的扫描与监控,保证上线过程中不会出现漏洞,同时,还需要编写一份应急方案,方便运维等人员的使用。
5、【运维阶段】:运维同学需要定时进行安全巡查,保证软件在使用过程中不会出现安全问题,一旦出现安全问题,则在执行应急方案的同时,需要对此情况进行上报,与研发一起解决这个安全问题。
四、安全测试与功能测试的区别?
与功能测试相比,安全测试需要转换视角,改变测试中模拟的对象。下面从以下维度比较功能测试与安全测试的不同:
1、测试目标不同
功能测试以发现Bug为目标;
安全测试以发现安全隐患为目标。
2、假设条件不同
功能测试假设导致问题的数据是用户不小心造成的,接口一般只考虑用户界面;
安全测试假设导致问题的数据是攻击者处心积虑构造的,需要考虑所有可能的攻击途径。
3、思考域不同
功能测试以系统所具有的功能为思考域;
安全测试的思考域不但包括系统的功能,还有系统的机制、外部环境、应用和数据自身安全风险与安全属性等。
4、问题发现模式不同
功能测试以违反功能定义为判断依据;
安全测试以违反权限与能力的约束为判断依据。
五、常见安全测试的验证点?
1、SQL注入
SQL注入是指将用户的输入信息在没有经过校验的情况下,拼接到业务SQL中去执行了,造成业务漏洞或对数据库造成攻击,主要是对【服务端】的攻击。
【案例】:
str SQL=“select*fromuserswhere(name=‘张三’;DROPTABLEusers;--)”str SQL=“select*fromuserswherename=‘张三’;DROPTABLEusers”strSQL=“select*fromuserswhere(name=‘“+username+”’)and(pw=‘“+password+”’); ”str SQL=“select*fromuserswhere(name=‘1’or‘1’=‘1’)and(pw=‘1’or‘1’=‘1’); ”
2、XSS攻击
XSS(Cross Site Scripting)跨站脚本攻击,其缩写原本为 CSS ,但与HTML中的层叠样式表(Cascading Style Sheets)缩写重名了,为了区分就将跨站脚本改为了XSS。
经常出现在富文本框,比如邮箱出现XSS攻击,那么可以通过发邮件给另外一个人,里面写带有攻击性的脚本之类的,对方收到后就会执行,比如脚本中写获取cookie之类的,则会被获取到,然后通过这个cookie就可以去登录对方的邮箱,主要是对【客户端】的攻击。
【XSS攻击过程】:
XSS攻击有以下4个步骤:
步骤1:攻击者通过邮件或其他方式诱使用户点击包含恶意代码的链接,例如攻击者通过E-mail向用户发送一个包含恶意代码的网站test.com 。
步骤2:用户点击链接后,浏览器会在用户毫不知情的情况下执行链接中包含的恶意代码。
步骤3:将用户与test.com 交互的cookie和session等信息发送给攻击者。
步骤4:攻击者拿到这些数据之后,就会伪装成用户与真正的网站进行会话,从事非法活动。
3、CSRF攻击
CSRF(Cross-Site Request Forgery)跨站请求伪造,它是一种针对Web应用程序的攻击方式,攻击者利用CSRF漏洞伪装成受信任用户的请求,来访问受攻击的网站。主要是对【客户端】的攻击。
比如打开了银行网站,此时就会产生session,那么此时如果打开一个含有隐藏的获取session并自动发送给银行的请求,则此时就会存在CSRF攻击。
(1)【XSS攻击有以下3个步骤】:
步骤1:用户访问一个信任网站时;
步骤2:在没有退出会话的情况下,攻击者诱使用户点击恶意网站,恶意网站会返回攻击代码,同时要求访问信任网站;
步骤3:这样用户就在不知情的情况下将恶意网站的代码发送到了信任网站。
(2)【CSRF和XSS的不同之处】:
XSS是盗取用户信息伪装成用户执行恶意活动,而CSRF则是通过用户向网站发起攻击。
如果将XSS攻击过程比喻为小偷偷取了用户的身份证去办理非法业务,则CSRF攻击则是骗子“劫持”了用户,让用户自己去办理非法业务,以达到自己的目的。
4、业务逻辑漏洞
比如下单时篡改订单金额、商品数量,如果接口没有做校验,则会导致数据被篡改,0元可购买商品的情况。
5、越权测试
验证手动更改url的参数,访问无权访问的页面;
拿到更高权限人员的账号和密码,验证通过接口调用等方式进行操作;
验证人员权限和数据权限是否有进行控制。
6、登录与身份验证
用户名与密码不一致时需进行校验,无法登录;
验证码需限制一次性使用;
验证每天验证码获取限制次数,避免造成短信轰炸,造成短信费用的损失;
验证密码不能带有提示,如手机号后6位数;
修改密码时需校验原密码;
订单号、流水号不能有规律,否则他人可根据规律遍历获取数据;
账号密码需要有锁定机制,比如错误输入5次锁定账号;
密码强度:大小写、特殊字符、长度。
7、文件上传与下载
需要校验文件上传次数,避免恶意上传,使得资源池爆满;
需要限制文件的类型和大小,避免木马病毒等,应该过滤一些存在安全隐患的文件;
系统资源需要登录才可访问,避免不登录系统,直接输入url可直接下载资源的情况;
校验通过../../等方式跳转到其他目录获取相关重要文件。
8、敏感信息
数据库、日志、提示等不出现敏感信息,避免泄漏;
人员的邮箱电话等信息需要加密(如数据库加密,页面数据脱敏);
需要使用https密文传输,非http明文传输。
9、重要数据
重要文件需附加水印。
10、敏感词校验
对系统带输入框的进行敏感词输入、搜索。
验证是否对敏感词有拦截,如有拦截则正常,如不能拦截则存在安全问题。
六、最后总结
对于测试工程师来说,除了黑盒测试、白盒测试、自动化测试、性能测试外,安全测试也较为重要。安全测试与功能测试一样,在软件测试过程中,是一个非常重要的测试环节,通过安全测试,可以在一定程度上提高系统的安全性,从而保障公司的利益。
在测试过程中,要转换看问题的视角,要将自己定位为恶意破坏规则的用户,以破坏的视角看待问题。同时,在看待PRD中的功能点时,要多角度考虑问题,需要考虑到它是否存在安全隐患,从不同角度看待问题,会有不同的结果。
安全测试固然重要,但是安全测试需要掌握的知识还有很多,需要很多专业的技术来支撑,否则很难做好,笔者也会在后面的文章与大家分享更多关于安全测试的内容,希望可以给你带来收获。大家可以结合我文章内容进行实战性应用,在实战过程中如有任何疑问,欢迎私信与我沟通!
------------------------------------------------------------------------------
【爱测试·爱分享】
更多内容可关注公众号:测试专享
专注于性能、自动化、接口测试、中间件等技术,与您分享测试技术点滴,内容涵盖:Jmeter、PTS、Python、Selenium、小程序自动化、Linux等热门测试技术,让您在实战中提升自我。在手机上阅读所有文章,随时随地都能学习。
--------------------------------------------------------------------------------