Snyk:查找并修复开源依赖项中的漏洞

2021-03-01 02:14:16

有关如何进行身份验证的更多详细信息,请参阅Snyk文档的CLI身份验证部分。

运行snyk --help以获得所有命令的快速概述,或有关CLI的完整详细信息,请阅读snyk.io CLI文档。

package参数是可选的。如果未提供软件包,Snyk将针对当前工作目录运行该命令,从而允许您测试非公共应用程序。

通过一次或在CI流程中对项目运行snyk测试来查找已知漏洞。

使用snyk向导和snyk保护修复漏洞。 snyk向导将引导您查找并修复项目中的已知漏洞。修复选项包括将策略文件配置为更新,自动修补和忽略漏洞。 (仅npm)

Alert snyk监视器在snyk.io上记录依赖项状态和任何漏洞,因此,当发现有新的漏洞或更新/补丁影响您的存储库时,您将收到警报。

通过将snyk测试作为CI的一部分运行,以在添加易受攻击的Node.js或Ruby依赖项时使测试失败,从而防止将新的易受依赖项添加到您的项目中。

Snyk还作为一组Docker映像提供,这些映像承载每个包管理器的运行时环境。例如,npm映像将包含在当前运行的容器上运行npm install所需的所有设置。当前有npm,Ruby,Maven,Gradle和SBT的图像。

默认情况下,映像可以在作为读取/写入卷安装到容器的指定项目上执行snyk测试,并且在运行docker容器时,snyk监视是否设置了MONITOR环境变量。如果您想要测试命令的HTML报告(--json会自动添加)。将生成一个名为snyk_report.html的HTML文件和一个名为snyk_report.css的CSS文件。该图像还写了一个名为snyk-res.json的文件供内部使用,并写了一个snyk-error.log的错误供我们参考,如果出现问题,我们可以查看这些错误。

USER_ID-[OPTIONAL]主机上的当前用户ID。如果未提供,则会将当前正在运行的用户的用户ID放入容器中。这用于CI构建(例如Jenkins),在该构建中我们与非特权用户一起运行,并且希望允许该用户访问已安装的项目文件夹。

监视器-[可选]如果设置,将通过snyk-to-html生成html报告,并在运行snyk测试后运行snyk监视器。

PROJECT_FOLDER-[OPTIONAL]如果设置,它将CD到已安装项目目录内的目录以在其中运行snyk。

ENV_FLAGS-[可选]运行容器时要传递到snyk测试的其他环境参数。

TARGET_FILE-[可选]传递给snyk测试和测试的其他环境参数snyk monitor等于cli中的--file选项。

Docker映像根据其包含的包管理器运行时,包管理器版本和snyk版本进行标记。标记的一般格式为[snyk-version]-[package-manager]-[package-manager-version]或仅[package -manager]-[package-manager-version]如果我们要使用最新版本的snyk。请查看可用标签以查看可用选项。

[snyk-version]-映像中安装的snyk的版本,如果省略该版本,则将使用最新版本。[package-manager]-可用的软件包管理器之一(例如:npm,mvn,gradle等) ...)。[package-manager-version]-映像内安装的软件包管理器的版本。

主机项目文件夹将被安装到容器上的/ project,并将用于读取依赖项文件并写入CI构建的结果。

这是在映像中运行snyk测试和snyk监视器(使用最新版本的Snyk)的示例,用于npm:

主机项目文件夹将被安装到容器上的/ project,并将用于读取依赖项文件并写入CI构建的结果。

这是在RubyGems的图像中运行snyk测试和snyk监视器(带有最新版本的Snyk)的示例:

主机项目文件夹将被安装到容器上的/ project,并将用于读取依赖关系文件并写入CI构建的结果。您可能还需要安装本地.m2和.ivy2文件夹。

这是在Maven映像中运行snyk测试和snyk监视器的示例(带有最新版本的Snyk):

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -v"< PROJECT_DIRECTORY>:/ project" -v" /home/user/.m2:/home/node/.m2" -v" /home/user/.ivy2:/home/node/.ivy2" snyk / snyk-cli:maven-3.5.4测试--org = my-org-name

主机项目文件夹将被安装到容器上的/ project,并将用于读取依赖关系文件并写入CI构建的结果。您可能还需要安装本地.m2和.ivy2文件夹。

以下是在SBT映像中运行snyk测试和snyk监视器(带有最新版本的Snyk)的示例:

注意:snyk需要依赖树或sbt-dependency-graph或sbt-coursier(最新sbt版本默认包含)模块来处理scala项目。

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -v"< PROJECT_DIRECTORY>:/ project" -v" /home/user/.m2:/home/node/.m2" -v" /home/user/.ivy2:/home/node/.ivy2" snyk / snyk-cli:sbt-0.13.16 test --org = my-org-name

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -v"< PROJECT_DIRECTORY>:/ project" -v" /home/user/.m2:/home/node/.m2" -v" /home/user/.ivy2:/home/node/.ivy2" snyk / snyk-cli:sbt-1.0.4测试--org = my-org-name

主机项目文件夹将被安装到容器上的/ project,并将用于读取依赖项文件并写入CI构建的结果。您可能还需要安装本地.gradle。

这是在Gradle映像中运行snyk测试和snyk监视器的示例(具有最新版本的Snyk):

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -v"< PROJECT_DIRECTORY>:/ project" -v" /home/user/.gradle:/home/node/.gradle" snyk / snyk-cli:gradle-2.8测试--org = my-org-name

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -v"< PROJECT_DIRECTORY>:/ project" -v" /home/user/.gradle:/home/node/.gradle" snyk / snyk-cli:gradle-4.4测试--org = my-org-name

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -v"< PROJECT_DIRECTORY>:/ project" -v" /home/user/.gradle:/home/node/.gradle" snyk / snyk-cli:gradle-5.4测试--org = my-org-name

主机项目文件夹将被安装到容器上的/ project,并将用于读取依赖项文件并写入CI构建的结果。

这是在Docker镜像中运行snyk测试和snyk监视器的示例(具有最新版本的Snyk):

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -v"< PROJECT_DIRECTORY>:/ project" -v" /var/run/docker.sock:/var/run/docker.sock" snyk / snyk-cli:docker测试--docker myapp:mytag --file =< DOCKERFILE>

主机项目文件夹将被安装到容器上的/ project,并将用于读取依赖项文件并写入CI构建的结果。

这是在Maven映像中运行snyk测试和snyk监视器的示例(带有最新版本的Snyk):

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -e" TARGET_FILE = setup.py" -v"< PROJECT_DIRECTORY>:/ project" snyk / snyk-cli:python-3测试--org = my-org-name

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -e" TARGET_FILE = Pipfile" -v"< PROJECT_DIRECTORY>:/ project" snyk / snyk-cli:python-3测试--org = my-org-name

docker run -it -e" SNYK_TOKEN =< TOKEN>" -e" USER_ID = 1234" -e" MONITOR = true" -e" TARGET_FILE = requirement-dev.txt" -v"< PROJECT_DIRECTORY>:/ project" snyk / snyk-cli:python-3测试--org = my-org-name