我正在尝试在公司的持续集成工作流程中自动使用Zap。我们正在使用gitlab-ci,我想使用将Zap嵌入作为服务的docker镜像,并且第一次使用,只需在可合法定位的网站(如itsecgames.com)上进行快速扫描即可。
我正在使用将zap.sh作为入口点公开的docker镜像nhsbsa/owasp-zap。
我的问题是:
如何在gitlab-ci YAML脚本中将此图像用作服务,以便在itsecgames.com上进行快速扫描?
相关信息:
这是我的gitlab-ci.yml:
image: openjdk:8-jdk
variables:
PROJECT_NAME: "psa-preevision-viewer"
stages:
- zap
zap-scanner:
services:
- nhsbsa/owasp-zap:latest
stage: zap
script:
- nhsbsa__owasp-zap -cmd -quickurl http://itsecgames.com/ -quickprogress
当gitlab运行程序尝试解决此工作时,我收到以下错误消息:$ nhsbsa__owasp-zap -cmd -quickurl http://itsecgames.com/ -quickprogress
/bin/bash: line 27: nhsbsa__owasp-zap: command not found
ERROR: Job failed: exit code 1
在这一点上,我尝试了不同的方法,例如直接调用zap.sh而不是nhsbsa__owasp-zap或nhsbsa-owasp-zap(根据gitlab-ci documentation,这两个名称都应该起作用)。可能是我严重误解了一些东西,但是在gitlab-ci中使用服务与拉取图像并在自己的计算机上调用docker运行该服务不一样吗?事实上,如果我使用
docker run nhsbsa/owasp-zap -cmd -quickurl http://itsecgames.com/ -quickprogress
我得到了具有发现的漏洞的XML。如果那很重要:
最佳答案
当您在gitlab中创建服务时,它会同时旋转docker容器,并为您提供访问它的主机名。这个想法是您从初始docker镜像调用命令,并将其指向您的服务镜像。正如@ Jakub-Kania提到的那样,它不允许您将其作为本地命令运行。
因此,就我们的nhsbsa / owasp-zap镜像而言,这意味着我们有一个owasp-zap守护程序正在运行,并可以在nhsbsa__owasp-zap:8080处使用。然后,我们使用maven和zap插件来扫描我们的应用程序。
这样的事情(我们还在声纳中解析zap结果):
mvn -B --non-recursive -Pzap -DzapPort=$NHSBSA__OWASP_ZAP_PORT_8080_TCP_PORT -DzapHost=$NHSBSA__OWASP_ZAP_PORT_8080_TCP_ADDR
-DzapTargetUrl=$baseUrl
-DsonarUrl=$SONAR_URL -Dsonar.branch=release
br.com.softplan.security.zap:zap-maven-plugin:analyze sonar:sonar
根据您要编写的应用程序的内容,您可能希望将docker run命令作为脚本步骤而不是使用服务来运行。
@Simon Bennetts是否可以使用curl之类的功能将测试请求传递给远程zap守护程序?
关于docker - 尝试在gitlab-ci工作流程中使用zap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44460049/