软件开发完成之后,我们需要进行安全验证,验证我们的软件是不是符合安全要求。软件安全测试主要有以下几个方面:确定软件的安全特性实现是否与预期设计一致的过程;有关验证软件安全等级和识别潜在安全缺陷的过程;查找软件自身程序设计中存在的安全隐患,并检查;应用程序对非法侵入的防范能力。
为什么需要软件安全测试?主要是因为传统测试仅考虑软件出错时的处理,没有考虑对软件的故意安全攻击,所以需要专业的软件安全测试。
在应用投产前,应由独立的安全团队对应用的安全性进行综合评估,一般会从两个层面进行开展,一方面是功能性安全测试,另一方面是对抗性安全测试。
安全主要测试方法主要有:静态源代码审查,这个在编码阶段就可以进行,这个阶段如果出现问题,修复起来成本也比较低。程序发布之后可以进行渗透测试。
先给大家介绍一下源代码审查。作为软件测试的基本方法,静态分析可以快速、准确定位到软件缺陷的源代码。能有效的提高软件的可靠性和安全性。
静态分析是指在编译理论的基础上,对程序的结构、语义做软件安全性方面的分析。
静态源代码审查可以通过人工和工具相结合的方式对源代码的安全性进行测试,可以识别、跟踪和修复源代码中技术上和逻辑上的缺陷,比如软件安全漏洞、质量缺陷问题和业务逻辑问题等。
静态代码审查方法主要是在编码阶段进行测试,尽可能早地发现安全性问题。
静态源代码审查在某些行业是有些要求的,像金融银行业网上银行系统信息安全通用规范,会要求由第三方机构进行安全检测。
【源代码审查-人工审计】
人工审计部分内容的部分除了对工具扫描出来的问题进行审查,以下问题进行检查。
环境安全:第三方软件安全、开发环境安全、运行环境安全等。如中间件使用安全,是否使用最新版本的JDK,移动APP发布前是否使用混淆、签名、加固等保护方式等检查。
配置核查:对应用的配置方面进行全面检查,包括默认的安全配置、后台权限、运行账号、系统配置和运行环境等全面核查。
【反射型XSS攻击】
下图是我之前做过的一个截图,这是一个XSS的攻击,通过源代码审查可以把注入点定位出来,我们可以看到这是从请求中获取了一个字段,经过一个数据流返回到了用户这边。这是一个存储型的,从前段录入的一些信息,入库之后,再从库中取出来。
【XSS代码修复方式】
XSS攻击可以通过过滤器的方式规避,像Spring Boot里的过滤器。请求来的时候,先进过滤器,过滤之后,在进Servlet。
【SQL注入攻击】
下图是一个SQL注入攻击的例子,这是Mybatis的框架,我们可以看到框线中是用$符取了一个前端的参数,很容易造成SQL注入。
【SQL注入攻击修复方式】
Mybatis中建议用#的方式,这种方式会自动在参数两边加单引号,这样就能在一定程度上防止SQL注入。