SAST和DAST都是应用程序安全测试方法,用于发现应用程序的潜在安全问题。
什么是SAST?
SAST(static application security testing),静态应用程序安全测试,是一种白盒测试方法。通过检查代码以发现软件缺陷和安全漏洞,SAST是在软件开发生命周期(SDLC)的早期阶段(可以理解为编码阶段)发现代码漏洞,由于SAST是通过扫描源代码发现漏洞,所以能够精确给出存在漏洞的代码行。
什么是DAST?
DAST(dynamic application security testing),动态应用程序安全测试,是一种黑盒测试方法。在应用程序运行时对应用程序进行安全检查,以发现可能被攻击者利用的漏洞。DAST是在软件开发生命周期(SDLC)的中后阶段(可以理解为运行阶段)发现代码漏洞,由于DAST不扫描源代码,所以通常不能给出存在漏洞的具体代码位置。
SAST和DAST有什么区别?
通过上面的定义可以看出SAST和DAST是不同的测试方法,用于发现不同类型的漏洞,并且是在软件开发生命周期的不同阶段做的。SAST应该尽早执行,并且要针对全量源代码文件执行。DAST应该在类似于生产环境(预发布环境或者验收环境)中运行中的应用程序上执行。可以看出,SAST和DAST都做才能达到较好的安全效果。
如下列表是SAST和DAST一些具体的不同点:
SAST | DAST |
白盒安全测试方法,测试人员在了解设计和实现方法的情况下,由内到外进行测试。 | 黑盒安全测试方法,测试人员不了解应用程序的技术或框架,从外到内进行测试。 |
需要源代码,通过扫描源代码方式实现。 | 需要程序在运行中,在应用程序运行时对应用程序进行安全测试。 |
在软件开发生命周期(SDLC)的早期阶段发现代码漏洞。 | 在软件开发生命周期中后阶段发现代码漏洞。 |
修复漏洞成本低,由于在开发周期中较早地发现了漏洞,因此修复起来更快更容易。 | 修复漏洞成本较高,由于漏洞是在开发周期的末尾发现的,漏洞修复往往会被放到下一次迭代。 |
不能发现与运行时和环境相关的问题。 | 可以发现运行时和环境相关的问题。 |
适用于各种应用程序。 | 只适用web应用程序和web服务等应用程序。 |
小结
SAST主要用于发现编码阶段的安全问题,DAST主要用于发现运行阶段的安全问题。在实际应用中,最好把SAST和DAST都做掉以提高应用程序的安全性。