2

我在 GitLab CI(GitLab 社区版)14.5.2 中启用了 SAST 扫描。SAST 运行 semgrep 和 ESLint 等工具运行源代码并扫描漏洞。这行得通......除了它没有从我告诉它的结果中排除路径和文件,所以我的报告充满了来自 3rd 方库的垃圾。

由于我不想在报告中包含测试代码或第 3 方的东西,我为此使用 GitLab 提供的变量,称为SAST_EXCLUDED_PATHS我用来排除一些目录的变量。我的价值是这样的:

    variables:
        SAST_EXCLUDED_PATHS: spec, test, tests, tmp, server/libs, assets, vendor, *.min.js

所以基本上除了默认路径之外,我已经告诉它不要扫描server/libs,或.assetsvendor*.min.js

因此,添加步骤、添加排除项并设置SECURE_LOG_LEVEL为.gitlab-ci.yml 的简化版"debug"。后者,所以我可以看到阶段的调试输出,例如 sast-semgrep。

include:
    - template: Security/SAST.gitlab-ci.yml

stages:
    - test

# Run a SAST scan & report on the sources
sast:
    stage: test
    variables:
        SAST_EXCLUDED_PATHS: spec, test, tests, tmp, server/libs, assets, vendor, *.min.js
        SECURE_LOG_LEVEL: "debug"

我可以从调试中看到 sast-semgrep 正在接受我的排除并将它们转化为--exclude参数。但无论如何它只是扫描路径。我什至尝试将 glob 规则附加到路径上,例如“server/libs/**”。我什至尝试过使用绝对路径,例如“$CI_PROJECT_DIR/server/libs”,但这也不起作用。

我启用了调试控制台输出,我什至可以看到像 semgrep 这样的工具正在正确地扩展排除项。但它不起作用!此示例包含一个$CI_PROJECT_DIR没有任何区别的扩展。

[DEBU] [Semgrep] [2022-01-26T20:59:40Z] ▶ /usr/local/bin/semgrep -f /rules -o /builds/myprj/myprj/semgrep.sarif --sarif --no-rewrite-rule-ids --strict --disable-version-check --no-git-ignore --exclude spec --exclude  test --exclude  tests --exclude  tmp --exclude  "/builds/myprj/myprj/server/libs" --exclude  assets --exclude  vendor --exclude  *.min.js --enable-metrics /builds/myprj/myprj
[DEBU] [Semgrep] [2022-01-26T21:01:34Z] ▶ METRICS: Using configs from the Registry (like --config=p/ci) reports pseudonymous rule metrics to semgrep.dev.
To disable Registry rule metrics, use "--metrics=off".
Using configs only from local files (like --config=xyz.yml) does not enable metrics.
More information: https://semgrep.dev/docs/metrics
excluding files:
- spec
-  test
-  tests
-  tmp
-  "/builds/myprj/myprj/server/libs"
-  assets
-  vendor
-  *.min.js

据我所知,我正在使用 GitLab 调用的最新 GitLab 和 docker 映像。有谁知道为什么排除不起作用?我是否遗漏了一些明显的东西。仅供参考,我还在 GitLab Ultimate 评估副本中尝试了相同的 CI/CD 脚本,并且是相同的交易。因此,它与社区版中功能较弱的 SAST 功能无关,它仍应生成 JSON 报告。有任何想法吗?

4

1 回答 1

2

希望我不会太晚。我遇到了同样的问题,为我解决的问题是删除排除路径之间的空格。您的SAST_EXCLUDED_PATHS变量应如下所示:

  variables:
        SAST_EXCLUDED_PATHS: spec,test,tests,tmp,server/libs,assets,vendor,*.min.js
于 2022-02-14T12:17:09.933 回答