OWASP ZAP with Dradis

Web application security tool

  • Upload ZAP XML to create nodes, issues, evidence, and notes in a security assessment project in Dradis
  • Combine ZAP results with results from other testing tools and automatically discard, group, and update issues
  • Centralized security engagement info and findings make it simple to collaborate across teams to keep everyone up-to-date
  • Generate high-quality, customized web application vulnerability reports that include ZAP findings without hours of manual work

The OWASP Zed Attack Proxy (ZAP) is an easy to use integrated penetration testing tool for finding vulnerabilities in web applications. With the Dradis ZAP integration, ingest the results of ZAP tests, combine the findings with output from other security tools, update details for remediation, and quickly generate a custom web application vulnerability report.

The OWASP ZAP® name, if trademarked, is the intellectual property of the vendor. Uses of the OWASP ZAP® name in this page are for identification purposes only and do not imply an endorsement by the trademark owner. Dradis is not endorsed or owned by, or affiliated with, the OWASP ZAP® vendor.

Ready to use OWASP ZAP and Dradis?
Get Started Today
Reporting went from 1-2 days to half a day. Now we have way more time to spend on the fun things.
Jeffrey von Rotz's picture

Jeffrey von Rotz

Cyber Security Engineer at Rotz Security

How to Import OWASP ZAP Results into Dradis

OWASP ZAP (Zed Attack Proxy) is a free, open-source web application security scanner maintained by the OWASP Foundation. It provides automated scanners as well as tools for manual security testing, making it a staple in web application penetration testing. This guide walks you through importing ZAP XML scan results into Dradis so you can consolidate findings, map evidence to affected hosts, and build professional reports without re-typing every alert.

Why Use the Dradis ZAP Integration?

After a ZAP scan completes, you're left with an XML report containing alerts grouped by site. Each alert may have dozens of affected URLs (instances). Manually transferring these into a report is tedious and error-prone. The Dradis ZAP plugin automates this:

  • Issues are created from alert items — each unique ZAP alert (XSS, SQL Injection, missing headers, etc.) becomes a Dradis Issue with its risk level, description, solution, and references preserved.
  • Evidence links issues to hosts — each instance (URI, parameter, attack payload) becomes an Evidence entry tied to the host node where the vulnerability was found.
  • Nodes represent target sites — Dradis creates one Node per <site> element in the ZAP report, so multi-site scans stay organized.
  • Risk ratings carry over — ZAP's risk codes (High, Medium, Low, Informational) and confidence levels import directly into Dradis fields, ready for your report templates.

This structure lets your team review findings by host, by severity, or by vulnerability ty†nesspe — all from a single import.

Prerequisites

Before you begin, make sure you have:

  • Dradis Community Edition (CE) or Dradis Pro installed and running
  • A ZAP scan report in XML format (the standard OWASPZAPReport XML output)
  • A Dradis project created where you want to import the results

Note: Dradis imports the ZAP XML report format. If you exported your ZAP results as HTML or JSON, re-export from ZAP using Report > Generate Report and select the XML format.

Step-by-Step Import Process

Step 1: Open the Upload Manager

Log in to Dradis and navigate to your project. Click Upload in the top navigation bar to open the Upload Manager page.

Upload Manager page in Dradis

The Upload Manager shows a dropdown for selecting the import plugin and a file picker for your scan output.

Step 2: Select the ZAP Plugin

Click the plugin dropdown and select ZAP. This tells Dradis to parse the uploaded file using the OWASP ZAP importer, which expects the standard OWASPZAPReport XML schema.

ZAP plugin selected in the dropdown

Step 3: Choose Your ZAP XML File

Click Choose File and select your ZAP XML report. The file should be the standard XML export — the one that starts with <OWASPZAPReport> at the root element.

ZAP XML file selected for upload

Step 4: Upload and Process

Click Upload to start the import. Dradis parses the XML, creates Issues from each <alertitem>, and creates Evidence entries from each <instance> within those alerts. A progress log shows the import activity.

Upload complete with import results

The import log shows each alert being processed with its plugin ID, and evidence entries being created for each affected URL. In our sample, 10 alerts across 2 sites produced 10 Issues and 20 Evidence entries.

Step 5: Review Imported Issues

Navigate to the Issues tab to see all imported ZAP alerts. Each issue shows its title (the ZAP alert name), risk level, and the number of affected hosts.

Issues list showing imported ZAP alerts

ZAP alerts span the full severity spectrum. In a typical scan, you'll see High-risk findings like Cross Site Scripting and SQL Injection alongside Medium findings like missing X-Frame-Options headers and Low/Informational items like missing HSTS headers or loosely scoped cookies. This makes Dradis an effective triage tool — you can sort by severity and focus on what matters first.

Step 6: Examine an Issue in Detail

Click any issue to see its full content. The issue detail view shows all the fields imported from ZAP, formatted using Dradis field mapping.

Issue detail showing ZAP alert content

Each issue contains the alert title, risk description, confidence level, detailed description, recommended solution, other information, and references including CWE and WASC identifiers. This gives you everything needed for the finding description section of your report.

Step 7: Browse Host Nodes

The sidebar shows nodes created from the ZAP report. Each <site> element in the XML becomes a node labeled with the hostname. Expand the Scanner output tree to see all target hosts.

Nodes tree showing ZAP target hosts

In our example, the two sites scanned (www.acmecorp.com and api.acmecorp.com) each appear as separate nodes. This multi-site organization is particularly useful when ZAP scans cover both a web application and its API backend.

Step 8: View Host Evidence

Click a host node to see all evidence associated with that target. The Evidence tab lists every instance (affected URL, parameter, and attack payload) linked to that host.

Host node showing associated evidence

Evidence entries show which specific URLs triggered each alert, making it easy to provide proof-of-concept details in your report. The host-centric view lets you answer the question: "What vulnerabilities affect this specific server?"

Step 9: Examine Evidence Details

Click an individual evidence entry to see the full instance data. This includes the URI where the vulnerability was found, the affected parameter, and the attack payload that triggered the alert.

Evidence detail with URI, parameter, and attack data

The evidence detail view maps directly to ZAP's <instance> elements. For active scan findings like XSS or SQL Injection, you'll see the exact attack payload used. For passive findings like missing headers, the evidence shows which URLs are affected.

Field Mapping Reference

The ZAP plugin maps XML elements to Dradis fields. Here's the complete mapping:

Issue Fields

Dradis Field ZAP XML Source Dradis Template Placeholder
Title <alert> {{ zap[issue.alert] }}
Risk <riskdesc> {{ zap[issue.riskdesc] }}
Confidence <confidence> {{ zap[issue.confidence] }}
Description <desc> {{ zap[issue.desc] }}
Solution <solution> {{ zap[issue.solution] }}
OtherInfo <otherinfo> {{ zap[issue.otherinfo] }}
References <reference>, <cweid>, <wascid> {{ zap[issue.reference] }}, {{ zap[issue.cweid] }}, {{ zap[issue.wascid] }}

Additional source fields available for custom mappings: issue.pluginid, issue.riskcode, issue.count.

Evidence Fields

Dradis Field ZAP XML Source Dradis Template Placeholder
URI <uri> in <instance> {{ zap[evidence.uri] }}
Param <param> in <instance> {{ zap[evidence.param] }}
Attack <attack> in <instance> {{ zap[evidence.attack] }}

Understanding the ZAP Data Model in Dradis

ZAP's XML report has a specific hierarchy that maps cleanly to Dradis:

OWASPZAPReport └── site (hostname:port) → Dradis Node └── alerts └── alertitem → Dradis Issue └── instances └── instance → Dradis Evidence (linked to Issue + Node)

Key points about how this mapping works:

  1. One node per site: If your ZAP scan targets www.example.com and api.example.com, you'll get two nodes. The node label comes from the host attribute of the <site> element.

  2. One issue per alert: ZAP deduplicates findings by plugin ID. Each <alertitem> becomes exactly one Issue in Dradis, regardless of how many instances (affected URLs) it has.

  3. Evidence preserves instance detail: Each <instance> inside an alert becomes a separate Evidence entry. This means a single XSS finding affecting 15 URLs creates 1 Issue and 15 Evidence entries, all linked to the same host node.

  4. Risk codes map to severity: ZAP uses numeric risk codes (0=Informational, 1=Low, 2=Medium, 3=High) and the riskdesc field provides the human-readable version like "High (Medium)" where the parenthetical indicates confidence.

Tips for Working with ZAP Data in Dradis

Merged vs. Unmerged Reports

ZAP can generate two types of XML reports:

  • Merged reports combine alerts from all sites into each site's alert list. This is the default ZAP behavior.
  • Unmerged reports only include alerts that were actually found on each specific site.

Both formats import correctly into Dradis. However, with merged reports, you may see the same alert (e.g., "X-Frame-Options Header Not Set") appear as evidence under multiple host nodes. This is expected and reflects ZAP's finding that the issue affects multiple targets.

Handling Large Scan Results

ZAP active scans can produce hundreds of instances for common findings like missing security headers. When importing large reports:

  • The import may take longer as Dradis creates individual Evidence entries for each instance
  • Consider filtering your ZAP report before export (use ZAP's alert filters to exclude informational findings if they're not needed)
  • In Dradis Pro, use the Mappings Manager to control which fields appear in your report template, keeping the output focused

Combining ZAP with Other Scanners

ZAP excels at web application testing but doesn't cover infrastructure vulnerabilities. A common workflow:

  1. Import Nmap results for network discovery and service enumeration
  2. Import Nessus or OpenVAS for infrastructure vulnerability assessment
  3. Import ZAP for web application security findings

Dradis automatically groups evidence by host. If ZAP found XSS on www.acmecorp.com and Nessus found an outdated TLS configuration on the same host, both findings appear under the same node — giving you a complete picture for that target.

Working with ZAP's Plugin IDs

Each ZAP alert has a pluginid that uniquely identifies the scanner rule that generated it. The plugin ID imports into Dradis as part of the issue's identifier. This is useful for:

  • Deduplication across scans: If you import multiple ZAP reports from different scan sessions, Dradis uses the plugin ID to recognize existing issues and create new evidence rather than duplicate issues.
  • Cross-referencing: ZAP plugin IDs map to specific CWE entries. The cweid and wascid fields import into the References section, providing direct links to vulnerability databases.

ZAP Scan Policies and Report Coverage

ZAP uses scan policies to determine which test rules run during active scanning. Different policies produce different alert types in the XML report:

  • Default Policy: Runs all active scan rules including injection tests (XSS, SQLi, command injection), server security checks, and information disclosure tests. This produces the most comprehensive report for Dradis import.
  • Light Policy: Skips time-intensive tests like fuzzing and blind SQL injection. Results import into Dradis the same way but contain fewer alert types.
  • Custom Policies: If your team created custom scan policies, ensure the rules you care about are enabled before exporting. Only enabled rules that find results appear in the XML.

The passive scanner results (missing headers, cookie flags, information disclosure) are always included regardless of active scan policy. These typically make up the majority of Low and Informational findings in your Dradis project.

Using the ZAP API for Automated Workflows

For teams running ZAP in CI/CD pipelines or as part of automated testing, you can export results and import into Dradis programmatically:

  1. Run your ZAP scan using the ZAP API or ZAP CLI
  2. Export the XML report using the core/xmlreport API endpoint
  3. Upload to Dradis using the Dradis REST API with the ZAP plugin identifier

This lets you build a fully automated pipeline where every build triggers a security scan and the results flow directly into your Dradis project for review. The ZAP plugin in Dradis handles incremental imports gracefully — existing issues are updated with new evidence rather than duplicated.

Leveraging ZAP's Confidence Ratings

ZAP assigns both a risk level (severity) and a confidence rating to each finding. A "High (Low)" finding means high severity but low confidence — likely a false positive. Use this in Dradis to prioritize your manual verification:

  • High confidence: Likely true positive — include in your report
  • Medium confidence: Probable finding — verify with manual testing
  • Low confidence: Possible false positive — investigate before reporting

In Dradis Pro, you can create custom report templates that conditionally include findings based on confidence level, using the {{ zap[issue.confidence] }} placeholder.

Organizing Findings from ZAP Context Scans

ZAP supports context-based scanning where you define authentication, session management, and user roles for the target application. When you scan an authenticated application, the resulting alerts may include findings in protected areas that anonymous scanning would miss. These findings import into Dradis just like any other alert, but the evidence URIs will reflect the authenticated paths (e.g., /admin/settings, /user/profile/edit).

If you run both authenticated and unauthenticated scans, import both reports into the same Dradis project. Dradis deduplicates issues by plugin ID, so common findings are consolidated while authenticated-only findings appear as additional evidence entries on the existing issues.

Troubleshooting

"No scan results were detected in the uploaded file"

This error means Dradis couldn't find the expected /OWASPZAPReport/site XPath in your file. Common causes:

  • You uploaded an HTML report instead of XML — re-export from ZAP in XML format
  • The file is a ZAP session file (.session) rather than an exported report
  • The XML file is malformed or truncated — open it in a text editor and verify it starts with <OWASPZAPReport>

Issues Created but No Evidence

If issues import but no evidence appears, your ZAP report may not contain <instances> elements. This happens with:

  • Older ZAP versions that didn't include instance data
  • Manually edited XML files where instances were removed
  • ZAP API exports that use a different format

Ensure you're using ZAP 2.4+ and exporting the standard XML report from the GUI or the xmlreport API endpoint.

HTML Entities in Descriptions

ZAP XML encodes HTML content using XML entities (&lt;p&gt; instead of <p>). Dradis handles this automatically during import, rendering the descriptions as formatted text. If you see raw HTML entities in your issues, check that you're using a current version of the Dradis ZAP plugin.

Missing Nodes for Some Sites

If your ZAP report scanned multiple sites but only some appear as nodes, verify the XML structure. Each <site> element must have a valid host attribute. Sites without a host attribute are skipped during import.

Duplicate Issues After Multiple Imports

If you import the same ZAP report twice, you may see duplicate evidence entries. Dradis uses the ZAP plugin ID to identify existing issues and avoids creating duplicate issues, but evidence entries from the second import are added alongside the originals. To avoid this, delete existing findings from the previous import before re-importing, or create a new project for the fresh import. In Dradis Pro, the Merge feature gives you more granular control over how repeated imports are handled.

What's Next?

After importing your ZAP results:

  • Triage by severity: Sort issues by risk level and focus on High-risk findings first
  • Verify active findings: Manually confirm XSS, SQL Injection, and other active scan results before including them in your report
  • Add manual findings: Use Dradis to document findings from manual testing that ZAP didn't catch
  • Combine with other tools: Import results from Burp Suite, Nessus, or Nikto to build a comprehensive assessment
  • Generate your report: In Dradis Pro, use report templates with ZAP field placeholders to automate report generation. Request a demo to see the Mappings Manager in action.

Seven Strategies To Differentiate Your Cybersecurity Consultancy

You don’t need to reinvent the wheel to stand out from other cybersecurity consultancies. Often, it's about doing the simple things better, and clearly communicating what sets you apart.

  • Tell your story better
  • Improve your testimonials and case studies
  • Build strategic partnerships

Your email is kept private. We don't do the spam thing.