Как проверить, были ли отчеты / предупреждения ZAP сформированы после сканирования?
В настоящее время я взаимодействую с ZAP, используя REST-API (используя Groovy в качестве языка).
Чего я хочу добиться, так это запустить сканирование и получить результаты после завершения сканирования.
В настоящее время я просматриваю статус сканирования и предположил, что смогу получить результат, как только статус сканирования 100
, указывая, что сканирование завершено. Это не работает, однако, я должен запросить /JSON/core/view/alerts/
непрерывно, пока фактические результаты не будут получены.
Это в основном мой код:
String zapUrl = ${zap.getContainerIpAddress()}:8090"
def scanResponse = slurper.parse(new URL("$zapUrl/JSON/spider/action/scan/?url=http://featuretron:8080"))
String scanId = scanResponse.scan
def scanStatus = slurper.parse(new URL("$zapUrl/JSON/spider/view/status/?scanId=$scanId"))
while (scanStatus.status != "100") {
sleep(500)
scanStatus = slurper.parse(new URL("$zapUrl/JSON/spider/view/status/?scanId=$scanId"))
}
def alerts = slurper.parse(new URL("$zapUrl/JSON/core/view/alerts/"))
while (alerts.alerts.isEmpty()) {
sleep(500)
alerts = slurper.parse(new URL("$zapUrl/JSON/core/view/alerts/"))
}
Мой вопрос заключается в том, существует ли более стабильный способ, который показывает, были ли получены результаты. Также кажется, что официальные примеры Java-API тоже ждут:
1 ответ
Вы запускаете паука и ждете, пока он закончит правильно. Однако ZAP выполняет пассивное сканирование в фоновом потоке, и это то, что вам нужно ждать.
Для этого также есть вызовы API, это хороший пример: https://github.com/zaproxy/zap-api-python/blob/master/src/examples/basic-spider-scan.py - он использует Python API, но базовый API является одним и тем же независимо от того, какой клиент вы используете. Этот пример Java должен быть обновлен;)
Кстати, в вашем коде вы просто собираетесь выполнять пассивное сканирование, а не активное сканирование (где ZAP фактически атакует ваше приложение). Это то, что вы хотите?