From aa256a9e172f0cdcb157b698f1241fae73c64789 Mon Sep 17 00:00:00 2001 From: kingthorin Date: Wed, 13 Nov 2024 15:16:55 -0500 Subject: [PATCH] reports: HTML add sequence support Signed-off-by: kingthorin --- addOns/reports/CHANGELOG.md | 2 +- addOns/reports/reports.gradle.kts | 1 + ...traditional-html-plus-sequence-details.png | Bin 0 -> 33856 bytes ...port-traditional-html-sequence-details.png | Bin 0 -> 30233 bytes ...port-traditional-html-sequence-summary.png | Bin 0 -> 15005 bytes .../report-traditional-html-plus.html | 15 + .../contents/report-traditional-html.html | 15 + .../report-traditional-json-plus.html | 60 + .../contents/report-traditional-json.html | 43 + .../reports/resources/Messages.properties | 18 + .../traditional-html-plus/Messages.properties | 1 + .../reports/traditional-html-plus/report.html | 228 +++- .../resources/common.css | 85 ++ .../traditional-html-plus/template.yaml | 1 + .../traditional-html/Messages.properties | 1 + .../reports/traditional-html/report.html | 222 ++++ .../reports/traditional-html/template.yaml | 3 +- .../basic-traditional-html-plus.html | 1010 +++++++++-------- .../resources/basic-traditional-html.html | 704 +++++++----- .../sequence/StdActiveScanRunner.java | 31 + 20 files changed, 1629 insertions(+), 811 deletions(-) create mode 100644 addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-plus-sequence-details.png create mode 100644 addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-sequence-details.png create mode 100644 addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-sequence-summary.png diff --git a/addOns/reports/CHANGELOG.md b/addOns/reports/CHANGELOG.md index 4f82eca1398..58e293c5713 100644 --- a/addOns/reports/CHANGELOG.md +++ b/addOns/reports/CHANGELOG.md @@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## Unreleased ### Added - Stats counter to the main toolbar button (Issue 8375). -- Sequence data to JSON reports. +- Sequence data to JSON & HTML reports. ### Changed - Update automation job help. diff --git a/addOns/reports/reports.gradle.kts b/addOns/reports/reports.gradle.kts index 73636a17469..414fed77679 100644 --- a/addOns/reports/reports.gradle.kts +++ b/addOns/reports/reports.gradle.kts @@ -76,6 +76,7 @@ spotless { fileTree(projectDir) { include("src/**/*.html") exclude("src/main/zapHomeFiles/reports/risk-confidence-html/report.html") + exclude("src/main/zapHomeFiles/reports/traditional-html*/report.html") exclude("src/test/**/*.html") }, ) diff --git a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-plus-sequence-details.png b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-plus-sequence-details.png new file mode 100644 index 0000000000000000000000000000000000000000..e102c366bcb3032bb96eaf6a564eeb033c791bb2 GIT binary patch literal 33856 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%0DF}*`SwV^wMBEKL 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 HMd1Gc>^s95 literal 0 HcmV?d00001 diff --git a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-sequence-details.png b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-sequence-details.png new file mode 100644 index 0000000000000000000000000000000000000000..f85d218a23f23471b5b806cf5fd0292acc606652 GIT binary patch literal 30233 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

Gxgsfm+XF_W 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 literal 0 HcmV?d00001 diff --git a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-sequence-summary.png b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/common/images/report-traditional-html-sequence-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..712d115fcb70af8461e9892a1107394a2bd6e508 GIT binary patch literal 15005 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 Parameters params + + Sequence Details + sequencedetails + +

Sequence Support

+ + If "Sequence Details" are included in the report. Both a summary + section and details section will be included. +

+ Traditional HTML Plus - Sequences Summary +

+ Traditional HTML OPlus - Sequences Details +

Themes

diff --git a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-html.html b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-html.html index cbad1f99134..a80ddee994f 100644 --- a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-html.html +++ b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-html.html @@ -25,6 +25,10 @@

Sections

+ + + +
Alert Details alertdetails
Sequence Detailssequencedetails

Screenshot

@@ -33,6 +37,17 @@

Screenshot

Traditional HTML +

Sequence Support

+ + If "Sequence Details" are included in the report. Both a summary + section and details section will be included. +

+ Traditional HTML - Sequences Summary +

+ Traditional HTML - Sequences Details + diff --git a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json-plus.html b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json-plus.html index 08039551fd2..c56e1dbdbdc 100644 --- a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json-plus.html +++ b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json-plus.html @@ -83,6 +83,66 @@

About riskdesc

+ The report can also include details of Sequences and related active + scanning results, for example: + +
+    "sequences": [
+      {
+        "name": "Seq name",
+        "steps": [
+          {
+            "step": "1",
+            "pass": "true",
+            "resultDetails": "Pass",
+            "alertIds": [],
+            "original": {
+              "uri": "https://www.example.com/step1",
+              "method": "GET",
+              "request-header": "GET https://www.example.com/step1 HTTP/1.1\r\nhost: www.example.com\r\nuser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0\r\npragma: no-cache\r\ncache-control: no-cache\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "request-body": "\\x0000\\x0013",
+              "response-header": "HTTP/1.0 0\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "response-body": "\\x0000\\x0013"
+            },
+            "replay": {
+              "uri": "https://www.example.com/step1",
+              "method": "GET",
+              "request-header": "GET https://www.example.com/step1 HTTP/1.1\r\nhost: www.example.com\r\nuser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0\r\npragma: no-cache\r\ncache-control: no-cache\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "request-body": "\\x0000\\x0013",
+              "response-header": "HTTP/1.0 0\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "response-body": "\\x0000\\x0013"
+            }
+          },
+          {
+            "step": "2",
+            "pass": "false",
+            "resultDetails": "Fail",
+            "alertIds": [
+              2,
+              4
+            ],
+            "original": {
+              "uri": "https://www.example.com/step2",
+              "method": "GET",
+              "request-header": "GET https://www.example.com/step2 HTTP/1.1\r\nhost: www.example.com\r\nuser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0\r\npragma: no-cache\r\ncache-control: no-cache\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "request-body": "\\x0000\\x0013",
+              "response-header": "HTTP/1.0 0\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "response-body": "\\x0000\\x0013"
+            },
+            "replay": {
+              "uri": "https://www.example.com/step2",
+              "method": "GET",
+              "request-header": "GET https://www.example.com/step2 HTTP/1.1\r\nhost: www.example.com\r\nuser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0\r\npragma: no-cache\r\ncache-control: no-cache\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "request-body": "\\x0000\\x0013",
+              "response-header": "HTTP/1.0 0\r\nTest: Foo-Header\\x0000\\x0013\r\n\r\n",
+              "response-body": "\\x0000\\x0013"
+            }
+          }
+        ]
+      }
+    ]
+
+ diff --git a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json.html b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json.html index 6e0ed93dc47..dbb38efb094 100644 --- a/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json.html +++ b/addOns/reports/src/main/javahelp/org/zaproxy/addon/reports/resources/help/contents/report-traditional-json.html @@ -61,6 +61,49 @@

About riskdesc

+ The report can also include details of Sequences and related active + scanning results, for example: + +
+    "sequences": [
+      {
+        "name": "Seq name",
+        "steps": [
+          {
+            "step": "1",
+            "pass": "true",
+            "resultDetails": "Pass",
+            "alertIds": [],
+            "original": {
+              "uri": "https://www.example.com/step1",
+              "method": "GET"
+            },
+            "replay": {
+              "uri": "https://www.example.com/step1",
+              "method": "GET"
+            }
+          },
+          {
+            "step": "2",
+            "pass": "false",
+            "resultDetails": "Fail",
+            "alertIds": [
+              2,
+              4
+            ],
+            "original": {
+              "uri": "https://www.example.com/step2",
+              "method": "GET"
+            },
+            "replay": {
+              "uri": "https://www.example.com/step2",
+              "method": "GET"
+            }
+          }
+        ]
+      }
+    ]
+
diff --git a/addOns/reports/src/main/resources/org/zaproxy/addon/reports/resources/Messages.properties b/addOns/reports/src/main/resources/org/zaproxy/addon/reports/resources/Messages.properties index fd9755376d5..da48a962602 100644 --- a/addOns/reports/src/main/resources/org/zaproxy/addon/reports/resources/Messages.properties +++ b/addOns/reports/src/main/resources/org/zaproxy/addon/reports/resources/Messages.properties @@ -132,6 +132,24 @@ reports.report.risk.1 = Low reports.report.risk.2 = Medium reports.report.risk.3 = High +reports.report.sequences.details.name = Sequence Details +reports.report.sequences.details.note = With the associated active scan results. +reports.report.sequences.list.name = Name +reports.report.sequences.step.alerts = Alerts: +reports.report.sequences.step.label = Step +reports.report.sequences.step.original = Original +reports.report.sequences.step.replay = Replay +reports.report.sequences.step.req.body = Request Body +reports.report.sequences.step.req.header = Request Header +reports.report.sequences.step.request = Request +reports.report.sequences.step.resp.body = Response Body +reports.report.sequences.step.resp.header = Response Header +reports.report.sequences.step.response = Response +reports.report.sequences.step.result = Result: +reports.report.sequences.step.showhide = Show / Hide Request & Response +reports.report.sequences.summary.name = Summary of Sequences +reports.report.sequences.summary.note = For each step: result (Pass/Fail) - risk (of highest alert(s) for the step, if any). + reports.report.site = Site: {0} reports.report.sites = Sites: {0} reports.report.sites.title = Sites diff --git a/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/Messages.properties b/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/Messages.properties index 91bcbfda738..43221b7dd77 100644 --- a/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/Messages.properties +++ b/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/Messages.properties @@ -17,6 +17,7 @@ report.template.section.chart = Chart report.template.section.instancecount = Instance Count report.template.section.params = Parameters report.template.section.passingrules = Passing Rules +report.template.section.sequencedetails = Sequence Details report.template.section.statistics = Statistics report.template.stats.auth = Authentication Statistics report.template.stats.auth.none = No Authentication Statistics Found diff --git a/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/report.html b/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/report.html index 41a149a4be0..ac3fba6d1c8 100644 --- a/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/report.html +++ b/addOns/reports/src/main/zapHomeFiles/reports/traditional-html-plus/report.html @@ -10,16 +10,23 @@ + + + - + -

- - - Test Title -

-

- - Test Description - - +

+ + + Test Title +

+

+ + Test Description + + -

- !reports.report.generated! -

-

- !reports.report.zapVersion! -

-

- ZAP by Checkmarx -

- - - -

- +

+ - -

!reports.report.alerts.summary!

- - - - - - - - - - - - - - - - - - - - - - - - - -
!reports.report.alerts.summary.risklevel!!reports.report.alerts.summary.numalerts!
-
!reports.report.risk.3!
-
-
1
-
-
!reports.report.risk.2!
-
-
0
-
-
!reports.report.risk.1!
-
-
0
-
-
!reports.report.risk.0!
-
-
1
-
-
!reports.report.risk.-1!
-
-
0
-
-
- + +

!reports.report.alerts.summary!

+ + + + + + + + + + + + + + + + + + + + + + + + + +
!reports.report.alerts.summary.risklevel!!reports.report.alerts.summary.numalerts!
+
!reports.report.risk.3!
+
+
1
+
+
!reports.report.risk.2!
+
+
0
+
+
!reports.report.risk.1!
+
+
0
+
+
!reports.report.risk.0!
+
+
1
+
+
!reports.report.risk.-1!
+
+
0
+
+
+ - -

!reports.report.alerts.list!

- - - - - - - - - - - - - - - - -
!reports.report.alerts.list.name!!reports.report.alerts.list.risklevel!!reports.report.alerts.list.numinstances!
XSS!reports.report.risk.3!2
!reports.report.risk.0!0
-
- + + + - -

Passing Rules

- - - - - - - - - -
!reports.report.alerts.list.name!Rule TypeThresholdStrength
-
- + +

!reports.report.alerts.list!

+ + + + + + + + + + + + + + + + +
!reports.report.alerts.list.name!!reports.report.alerts.list.risklevel!!reports.report.alerts.list.numinstances!
XSS!reports.report.risk.3!2
!reports.report.risk.0!0
+
+ -

!reports.report.sites.title!

+ +

Passing Rules

+ + + + + + + + + +
!reports.report.alerts.list.name!Rule TypeThresholdStrength
+
+ - Number of Sites tree nodes actively scanned: - 0 +

!reports.report.sites.title!

- -

http://example.com

- - - - - - + Number of Sites tree nodes actively scanned: + 0 - -
HTTP Response CodeNumber of Responses
-
-

No Authentication Statistics Found

- - - + +

http://example.com

+ + + + + + - + +
HTTP Response CodeNumber of Responses
+
+

No Authentication Statistics Found

+ + + -
- + - -

!reports.report.alerts.detail!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
!reports.report.risk.3!
XSS
!reports.report.alerts.detail.description! -
XSS Description
- -
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test 'Other\
- -
!reports.report.alerts.detail.request.header! - !reports.report.size! - - -
!reports.report.alerts.detail.request.body! - !reports.report.size! - - -
!reports.report.alerts.detail.response.header! - !reports.report.size! - - -
!reports.report.alerts.detail.response.body! - !reports.report.size! - - -
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test Another 'Other\
- -
!reports.report.alerts.detail.request.header! - !reports.report.size! - - -
!reports.report.alerts.detail.request.body! - !reports.report.size! - - -
!reports.report.alerts.detail.response.header! - !reports.report.size! - - -
!reports.report.alerts.detail.response.body! - !reports.report.size! - - -
!reports.report.alerts.detail.instances!2
!reports.report.alerts.detail.solution! -
Test Solution
- -
!reports.report.alerts.detail.reference! - Test Reference - -
!reports.report.alerts.detail.tags! +
+ + + +

!reports.report.alerts.detail!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
!reports.report.risk.3!
XSS
!reports.report.alerts.detail.description! +
XSS Description
+ +
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test 'Other\
+ +
!reports.report.alerts.detail.request.header! + !reports.report.size! + + +
!reports.report.alerts.detail.request.body! + !reports.report.size! + + +
!reports.report.alerts.detail.response.header! + !reports.report.size! + + +
!reports.report.alerts.detail.response.body! + !reports.report.size! + + +
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test Another 'Other\
+ +
!reports.report.alerts.detail.request.header! + !reports.report.size! + + +
!reports.report.alerts.detail.request.body! + !reports.report.size! + + +
!reports.report.alerts.detail.response.header! + !reports.report.size! + + +
!reports.report.alerts.detail.response.body! + !reports.report.size! + + +
!reports.report.alerts.detail.instances!2
!reports.report.alerts.detail.solution! +
Test Solution
+ +
!reports.report.alerts.detail.reference! + Test Reference + +
!reports.report.alerts.detail.tags! + + + + tagkey + = + tagvalue + + +
!reports.report.alerts.detail.cweid!123
!reports.report.alerts.detail.wascid!456
!reports.report.alerts.detail.pluginid!1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
!reports.report.risk.0!
!reports.report.alerts.detail.description!
!reports.report.alerts.detail.instances!0
!reports.report.alerts.detail.solution!
!reports.report.alerts.detail.reference!
!reports.report.alerts.detail.tags!
!reports.report.alerts.detail.cweid!
!reports.report.alerts.detail.wascid!
!reports.report.alerts.detail.pluginid!1
+
+ + + + + + + + - - - tagkey - = - tagvalue - - -
!reports.report.alerts.detail.cweid!123
!reports.report.alerts.detail.wascid!456
!reports.report.alerts.detail.pluginid!1
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
!reports.report.risk.0!
!reports.report.alerts.detail.description!
!reports.report.alerts.detail.instances!0
!reports.report.alerts.detail.solution!
!reports.report.alerts.detail.reference!
!reports.report.alerts.detail.tags!
!reports.report.alerts.detail.cweid!
!reports.report.alerts.detail.wascid!
!reports.report.alerts.detail.pluginid!1
-
- - diff --git a/addOns/reports/src/test/resources/org/zaproxy/addon/reports/resources/basic-traditional-html.html b/addOns/reports/src/test/resources/org/zaproxy/addon/reports/resources/basic-traditional-html.html index d2d7d461fdb..b6b9595a6e6 100644 --- a/addOns/reports/src/test/resources/org/zaproxy/addon/reports/resources/basic-traditional-html.html +++ b/addOns/reports/src/test/resources/org/zaproxy/addon/reports/resources/basic-traditional-html.html @@ -5,381 +5,475 @@ Test Title -

- - - Test Title -

-

- - Test Description - - - -

- - !reports.report.site! - -

- -

- !reports.report.generated! -

- -

- !reports.report.zapVersion! -

- -

- ZAP by Checkmarx -

- - -

!reports.report.alerts.summary!

- - - - - - - - - - - - - - - - - - - - - - - - - -
!reports.report.alerts.summary.risklevel!!reports.report.alerts.summary.numalerts!
-
!reports.report.risk.3!
-
-
1
-
-
!reports.report.risk.2!
-
-
0
-
-
!reports.report.risk.1!
-
-
0
-
-
!reports.report.risk.0!
-
-
1
-
-
!reports.report.risk.-1!
-
-
0
-
-
- - - -

!reports.report.alerts.list!

- - - - - - - - - - - - - - - - -
!reports.report.alerts.list.name!!reports.report.alerts.list.risklevel!!reports.report.alerts.list.numinstances!
XSS!reports.report.risk.3!2
!reports.report.risk.0!0
-
- - - -

!reports.report.alerts.detail!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
!reports.report.risk.3!
XSS
!reports.report.alerts.detail.description! -
XSS Description
- -
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test 'Other\
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test Another 'Other\
!reports.report.alerts.detail.instances!2
!reports.report.alerts.detail.solution! -
Test Solution
- -
!reports.report.alerts.detail.reference! - Test Reference - -
!reports.report.alerts.detail.cweid!123
!reports.report.alerts.detail.wascid!456
!reports.report.alerts.detail.pluginid!1
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
!reports.report.risk.0!
!reports.report.alerts.detail.description!
!reports.report.alerts.detail.instances!0
!reports.report.alerts.detail.solution!
!reports.report.alerts.detail.reference!
!reports.report.alerts.detail.cweid!
!reports.report.alerts.detail.wascid!
!reports.report.alerts.detail.pluginid!1
-
- - +

+ + + Test Title +

+

+ + Test Description + + + +

+ + !reports.report.site! + +

+ +

+ !reports.report.generated! +

+ +

+ !reports.report.zapVersion! +

+ +

+ ZAP by Checkmarx +

+ + +

!reports.report.alerts.summary!

+ + + + + + + + + + + + + + + + + + + + + + + + + +
!reports.report.alerts.summary.risklevel!!reports.report.alerts.summary.numalerts!
+
!reports.report.risk.3!
+
+
1
+
+
!reports.report.risk.2!
+
+
0
+
+
!reports.report.risk.1!
+
+
0
+
+
!reports.report.risk.0!
+
+
1
+
+
!reports.report.risk.-1!
+
+
0
+
+
+ + + + + + + +

!reports.report.alerts.list!

+ + + + + + + + + + + + + + + + +
!reports.report.alerts.list.name!!reports.report.alerts.list.risklevel!!reports.report.alerts.list.numinstances!
XSS!reports.report.risk.3!2
!reports.report.risk.0!0
+
+ + + +

!reports.report.alerts.detail!

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
!reports.report.risk.3!
XSS
!reports.report.alerts.detail.description! +
XSS Description
+ +
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test 'Other\
!reports.report.alerts.detail.url!http://example.com/example_3
!reports.report.alerts.detail.method!GET
!reports.report.alerts.detail.param!Test Param
!reports.report.alerts.detail.attack!Test "Attack\"
!reports.report.alerts.detail.evidence!Test <p>Evidence
!reports.report.alerts.detail.otherinfo!Test Another 'Other\
!reports.report.alerts.detail.instances!2
!reports.report.alerts.detail.solution! +
Test Solution
+ +
!reports.report.alerts.detail.reference! + Test Reference + +
!reports.report.alerts.detail.cweid!123
!reports.report.alerts.detail.wascid!456
!reports.report.alerts.detail.pluginid!1
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
!reports.report.risk.0!
!reports.report.alerts.detail.description!
!reports.report.alerts.detail.instances!0
!reports.report.alerts.detail.solution!
!reports.report.alerts.detail.reference!
!reports.report.alerts.detail.cweid!
!reports.report.alerts.detail.wascid!
!reports.report.alerts.detail.pluginid!1
+
+ + + + + + + diff --git a/addOns/sequence/src/main/java/org/zaproxy/zap/extension/sequence/StdActiveScanRunner.java b/addOns/sequence/src/main/java/org/zaproxy/zap/extension/sequence/StdActiveScanRunner.java index 79c1d02786f..169fc3a1cad 100644 --- a/addOns/sequence/src/main/java/org/zaproxy/zap/extension/sequence/StdActiveScanRunner.java +++ b/addOns/sequence/src/main/java/org/zaproxy/zap/extension/sequence/StdActiveScanRunner.java @@ -28,8 +28,13 @@ import org.apache.logging.log4j.Logger; import org.parosproxy.paros.Constant; import org.parosproxy.paros.control.Control; +import org.parosproxy.paros.core.scanner.Alert; +import org.parosproxy.paros.db.DatabaseException; +import org.parosproxy.paros.db.RecordAlert; +import org.parosproxy.paros.db.TableAlert; import org.parosproxy.paros.extension.history.ExtensionHistory; import org.parosproxy.paros.model.HistoryReference; +import org.parosproxy.paros.model.Model; import org.parosproxy.paros.model.SiteNode; import org.parosproxy.paros.network.HttpMessage; import org.zaproxy.addon.network.ExtensionNetwork; @@ -218,6 +223,7 @@ public static class SequenceStepData { private boolean pass; private String result; private List alertIds; + private List alerts; private HttpMessage originalMsg; private HttpMessage replayMsg; @@ -235,5 +241,30 @@ public SequenceStepData( this.originalMsg = originalMsg; this.replayMsg = replayMsg; } + + public List getAlerts() { + if (alerts == null) { + alerts = new ArrayList<>(); + TableAlert tableAlert = Model.getSingleton().getDb().getTableAlert(); + alertIds.forEach( + id -> { + try { + RecordAlert recoardAlert = tableAlert.read(id); + if (recoardAlert != null) { + alerts.add(new Alert(recoardAlert)); + } + } catch (DatabaseException e) { + LOGGER.warn( + "Couldn't get alert for ID {} : {}", id, e.getMessage()); + } + }); + } + + return alerts; + } + + public int getHighestAlert() { + return getAlerts().stream().map(Alert::getRisk).max(Integer::compare).orElse(-1); + } } }