我目前正在使用REST-API (使用Groovy作为语言)与ZAP进行交互。
我想要实现的是开始一次扫描,并在扫描完成后检索结果。
我目前正在查看扫描状态,并且我假设,一旦扫描状态为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的官方示例也在等待:
发布于 2017-08-01 12:28:52
您正在运行爬行器,并等待它正确完成。然而,ZAP在后台线程中执行被动扫描,这是您需要等待的。
也有一些应用程序接口调用,这是一个很好的例子:https://github.com/zaproxy/zap-api-python/blob/master/src/examples/basic-spider-scan.py - its使用python API,但无论您使用什么客户端,底层API都是相同的。该java示例需要更新;)
顺便说一句,在你的代码中,你只会执行被动扫描,而不是主动扫描( ZAP实际上会攻击你的应用程序)。这是你想要的吗?
https://stackoverflow.com/questions/45437575
复制