我正在尝试在公司的持续集成工作流程中自动使用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-runner版本是1.11.1
  • gitlab版本是Community Edition 8.7.4
  • 最佳答案

    当您在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/

    10-16 08:32