SAST 与 DAST 是什么
SAST 在源码层面发现缺陷模式,DAST 在运行环境模拟外部访问行为发现可被利用的问题;两者结果按严重级与可利用性分级,高危项进入阻断集合。SAST 覆盖代码与依赖,速度快、误报相对多;DAST 覆盖真实运行时行为,需要可访问的测试环境,通常安排在环境部署之后执行。
基本信息
| SAST 输入 | 源码、依赖与配置,工具如 CodeQL、Semgrep |
|---|---|
| DAST 输入 | 可访问的测试环境地址,工具如 OWASP ZAP |
| 执行时机 | 静态扫描在提交与合并阶段,动态扫描在部署测试环境后 |
| 分级 | 严重与高危阻断,中低危限期整改 |
| 误报处理 | 登记豁免并注明理由与复核日期 |
| 运行频率 | 静态扫描按提交触发,动态扫描按发布窗口或每日定时 |
| 结果去向 | 报告归档并关联整改工单,处理有闭环 |
两类扫描对比
| 维度 | SAST | DAST |
|---|---|---|
| 输入 | 源码与依赖清单 | 运行中的测试环境 |
| 发现 | 缺陷模式与不安全写法 | 可被利用的运行时问题 |
| 优点 | 覆盖全,能定位到行 | 贴近真实攻击面 |
| 局限 | 误报需要人工确认 | 覆盖率依赖爬取与用例 |
扫描接入示例
扫描接入示例
# 代码扫描:提交与合并阶段运行
- uses: github/codeql-action/init@v3
with:
languages: javascript-typescript
- uses: github/codeql-action/analyze@v3
# 动态扫描:测试环境部署后运行
- run: zap-baseline.py -t https://staging.example.com
# 高危结果使作业失败,进入阻断集合典型使用场景
- 合并门禁:PR 阶段跑增量扫描,高危问题直接阻断合并
- 发布前检查:测试环境部署后跑基线动态扫描,覆盖常见 Web 风险
- 依赖审查:结合依赖清单扫描已知漏洞版本
- 整改跟踪:中低危问题限期修复,扫描报告与工单系统联动
- 上线取证:保留扫描报告作为安全审核的凭据
DAST 只对授权的测试环境运行:对生产或第三方系统扫描可能违反授权与法规。
豁免要有到期日:登记豁免并定期复核,避免「永久忽略」长期失控。