如何检查扫描后是否生成了ZAP报告/警报?

时间:2017-08-01 12:17:28

标签: zap zapproxy

我目前正在使用REST-API与ZAP进行交互(使用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的官方示例也在等待:

https://github.com/zaproxy/zap-api-java/blob/develop/subprojects/zap-clientapi/src/examples/java/org/zaproxy/clientapi/examples/SimpleExample.java#L65

1 个答案:

答案 0 :(得分:2)

您正在运行蜘蛛并等待它正确完成。 但是,ZAP在后台线程中执行被动扫描,这是您需要等待的内容。

也有API调用,这是一个很好的例子:https://github.com/zaproxy/zap-api-python/blob/master/src/examples/basic-spider-scan.py - 它使用python API,但无论你使用什么客户端,底层API都是一样的。需要更新那个java示例;)

在您的代码中BTW,您只是执行被动扫描而不是主动扫描(ZAP实际上会攻击您的应用)。这是你想要的吗?