对于我的CI,我知道需要从CLI启动ZAP,这很好:
docker run --net mynetwork -v $(pwd):/zap/wrk/:rw
-t owasp/zap2docker-stable zap-full-scan.py -I -j -m 10 -T 60
-t http://myapiserver.com:8080/api/docs
-r report-$(date +%Y%m%d-%H%M%S).html
现在,我的REST API服务器使用OAuth2/OIDC/Keycapture,我知道如何获得令牌,这没有问题。
但我不知道如何激活社区脚本AddBearerTokenHeader.js,以便在每个调用中包含一个令牌。文档对我来说并不清楚,基本上要求安装应用程序以使用鼠标查找密钥,但我做不到(无权在我的电脑上安装应用程序(。
在哪里可以找到激活此脚本的参数?
更新
虽然我能够从Docker启动Swing接口。。。
docker run -u zap -p 8080:8080 -p 8090:8090 -i owasp/zap2docker-stable zap-webswing.sh
# Browse for http://localhost:8080/zap/
不能使config.xml的差异在文档之后引起(是的,我知道如何使用docker、共享目录、RTFM等(
@SimonBennets的答案提供了一个很好的解决方案,而不是最好的(如果我想添加多个标头怎么办?如何更新令牌?(,但它很有效:
TOKEN=$(curl -ks -X POST
${URL}realms/${REALM}/protocol/openid-connect/token
-H "Accept: application/json"
-H "Content-Type: application/x-www-form-urlencoded"
-H "cache-control: no-cache"
-d "grant_type=password"
-d "username=${USER_NAME}"
-d "password=${USER_PASS}"
-d "client_id=admin-cli"|jq -r .access_token|tr -d "n"
)
docker run --net net_oia
--name zap
-v $(pwd):/zap/wrk/:rw
-e ZAP_AUTH_HEADER="Authorization"
-e ZAP_AUTH_HEADER_VALUE="Bearer $TOKEN"
-t owasp/zap2docker-stable zap-full-scan.py -I -j -m 10 -T 60
-t http://apidb:8080/api/
-r report-$(date +%Y%m%d-%H%M%S).html
我的日志显示了OWASP Zap HEADER是如何生成的(注意authorization
头…为什么是小写?无论如何,这是可以的(:
apidb | Headers({'host': 'apidb:8080', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0', 'pragma': 'no-cache', 'cache-control': 'no-cache', 'authorization': 'Bearer eyJhbGciOiJSUzI1NiIsIn...'})
使用ZAP_AUTH_HEADER_VALUE环境变量是一个更容易的选项。这里有更详细的解释https://www.zaproxy.org/docs/authentication/handling-auth-yourself/