Exercise the running application like an external attacker—find what scanners in the repo cannot see.
DAST sends real HTTP(S) requests to a deployed environment (often staging). It crawls or uses OpenAPI specs to discover routes, injects payloads, and observes responses, status codes, timing, and DOM changes. It excels at misconfigurations, exposed debug endpoints, auth/session flaws visible only at runtime, and some classes of injection when the app is live.
OWASP ZAP (OWASP Zed Attack Proxy) is a free, community DAST proxy and scanner.
Warning Authenticated scans can destroy data—use disposable data sets and read-only test tenants.
| Capability | Benefit |
|---|---|
| OpenAPI import | Route coverage without fragile crawling |
| Auth scripting | Test behind login |
| Baseline mode | Fail build only on new alerts |
| CI-friendly exit codes | Gate pipelines deterministically |
| Tool | Strength | Trade-off |
|---|---|---|
| OWASP ZAP | Open source, automation, huge community | Tuning needed for low noise |
| Burp Suite | Manual + pro scanner, great for testers | Pro is commercial |
| Commercial DAST clouds | Managed infra, compliance reports | Cost, less customization |
jobs:
zap-baseline:
runs-on: ubuntu-latest
steps:
- name: ZAP Baseline Scan
uses: zaproxy/action-baseline@v0.12.0
with:
target: 'https://staging.example.internal'
rules_file_name: '.zap/rules.tsv'
fail_action: true
Replace target with your authorized staging URL; add authentication hooks as needed for your app.