GitLab 中的自动化安全测试

Automated Security Test in GitLab

我正在尝试在我的 GitLab 项目中实现自动化。

为了执行安全扫描,我想使用 ZAP 遍历 投影并扫描它们。手动传递所有 URL 显然是不可能的,所以我试图找到一种方法使所有测试尽可能自动化。

问题是:如何访问应用程序中存在的所有 URL?

我认为一种方法是将它们作为 YML 文件中的 "variable" 传递,然后将它们用作 ZAP 命令中的参数,类似这样(见下文)。

这是一个合理的解决方案吗?有没有其他方法可以在存储库中执行自动扫描(无需手动传递 URL)? 谢谢

variables:
  OWASP_CONTAINER: $APP_NAME-$BUILD_ID-OWASP
  OWASP_IMAGE: "owasp/zap2docker-stable"
  OWASP_REPORT_DIR: "owasp-data"
  ZAP_API_PORT: "8090"
  PENTEST_IP: 'application:8080'

run penetration tests:
 stage: pen-tests
 image: docker:stable

    - docker exec $OWASP_CONTAINER zap-cli -v -p $ZAP_API_PORT active-scan http://$PENTEST_IP/html 

您需要打开一个新功能标志 (FF_NETWORK_PER_BUILD) 以在每次构建时启用一个网络。然后服务也可以相互联系(自 GitLab runner 12.9 起可用)。有关详细信息,请参阅:https://docs.gitlab.com/runner/executors/docker.html#networking

GitLab 中 owasp zap 作业的工作示例 CI:

owasp-zap:
  variables:
    FF_NETWORK_PER_BUILD: 1
  image: maven
  services:
    - selenium/standalone-chrome
    - name: owasp/zap2docker-weekly
      entrypoint: ['zap.sh', '-daemon', '-host', '0.0.0.0', '-port', '8080',
          '-config', 'api.addrs.addr.name=.*', '-config', 'api.addrs.addr.regex=true', '-config', 'api.key=1234567890']
  script:
    - sleep 5
    - mvn clean test -Dbrowser=chrome -Dgrid_url=http://selenium-standalone-chrome:4444/wd/hub -Dproxy=http://owasp-zap2docker-weekly:8080
    - curl http://owasp-zap2docker-weekly:8080/OTHER/core/other/htmlreport/?apikey=1234567890 -o report.html
  artifacts:
    paths:
      - report.html