四种方法各看什么
SAST 读源代码或字节码找缺陷模式,DAST 从外部测试运行中的服务,IAST 在运行期插桩观察数据流,SCA 比对项目依赖中的已知组件问题。四者的输入与时机都不同,覆盖不同层面的风险,是互补关系而不是替代关系。
基本信息
| SAST | 输入源码/字节码,编码阶段,缺陷定位到行 |
|---|---|
| DAST | 输入运行中的服务,测试阶段,贴近真实暴露面 |
| IAST | 运行时插桩,测试或预发环境,告警带数据流 |
| SCA | 依赖清单与锁文件,构建阶段,关注第三方组件 |
| 共同要求 | 结果要去重、定级、进同一台账 |
典型使用场景
- 提交门禁:SAST 与 SCA 在合并请求阶段拦截明显缺陷与高危依赖
- 版本发布前:DAST 对预发环境做一轮外部视角检查
- 复杂逻辑验证:对权限与支付链路用 IAST 观察真实数据流
- 依赖治理:SCA 发现组件漏洞后,推动升级或替换依赖
- 方法组合:把四类结果按资产与问题类型聚合,避免同一问题反复派单
流水线位置示意
流水线位置示意
编码提交 → SAST(快速规则集,失败即阻断)+ SCA(依赖清单比对)
构建产物 → SCA(对打包产物复扫,避免开发依赖干扰)
测试环境 → DAST(认证态扫描,覆盖登录后路径)
预发环境 → IAST(插桩验证可疑数据流,降误报)
上线后 → DAST 复测 + 外部暴露面扫描方法对比
| 方法 | 输入 | 优势 | 局限 |
|---|---|---|---|
| SAST | 源代码或字节码 | 能定位到代码行 | 误报较多,难覆盖运行期逻辑 |
| DAST | 运行中的服务 | 贴近真实暴露面 | 登录后逻辑与深路径覆盖有限 |
| IAST | 运行时插桩 | 定位准、误报低 | 需部署插桩,环境要求高 |
| SCA | 依赖清单 | 发现第三方组件问题 | 依赖清单与产物范围常不一致 |
SCA 结果要和实际打包产物核对:开发依赖与运行产物中包含的组件范围常不一致,只扫源码清单会漏掉被间接引入的组件。
四种方法的输出要进同一台账并统一去重,否则同一问题会在 SAST、DAST、SCA 里各报一次,修复方看到三条工单却只有一处代码要改。