1. 概述

在快速变化的软件开发领域中,确保强大的安全性是一项重要但常常棘手的任务。随着现代应用严重依赖开源库和依赖项,这些组件中潜藏的漏洞可能构成严重威胁。

这就是Snyk发挥作用的地方,它为开发者提供了自动检测潜在漏洞代码或依赖项的工具。本文将探讨其功能,并说明如何在Java项目中使用它们。

2. 什么是Snyk?

Snyk是一个基于云的安全平台,专注于识别和缓解开源软件组件和容器中的漏洞。 在深入特定功能之前,让我们先看看这篇文章将重点介绍的主要用途。

2.1. Snyk开源

Snyk开源通过分析应用程序所依赖的库和包来扫描我们的项目依赖。它会检查这些依赖与已知漏洞的全面数据库进行对比。 Snyk开源不仅指出漏洞,还提供可操作的补救建议,如升级到安全版本或应用补丁。

2.2. Snyk代码

Snyk代码采用静态代码分析技术来审查源代码,识别安全漏洞和其他问题。它在不执行代码的情况下审查代码,通过分析代码库的结构、逻辑和模式来查找潜在问题。这包括源自已知安全数据库的漏洞,以及诸如代码异味、潜在逻辑错误和配置错误等代码质量问题。

2.3. 整合

我们可以通过在需求时使用Snyk CLI或将其连接到版本控制系统(如Git)来将Snyk集成到项目中。 这种集成允许Snyk在代码更改时访问我们的代码库并执行自动化扫描。或者,我们可以为构建系统(如Gradle)使用插件,使其作为构建过程的一部分执行扫描。

3. 设置

在使我们的项目更加安全之前,我们需要执行一些步骤来设置Snyk CLI及其与Snyk服务的连接。

3.1. 创建账户

Snyk是基于云的解决方案,我们需要一个账户才能使用。 在撰写这篇文章时,基本的Snyk账户(适用于测试和小型项目)是免费的。

3.2. 安装CLI

Snyk提供了命令行界面(CLI),让我们可以从终端与Snyk服务交互。安装完CLI应用后,它只会负责连接到Snyk服务器,所有繁重的工作都会在云端完成。

我们可以通过Node Package Manager(npm)全局安装CLI:

$ npm install -g snyk

还可以参考Snyk手册中的其他安装方法

3.3. 认证

最后,我们需要认证,以便CLI知道应连接到哪个账户:

$ snyk auth

4. 使用CLI检测漏洞

Snyk CLI是Snyk提供的工具,让我们能够轻松连接到Snyk服务并在命令行中执行扫描。我们将看看Snyk的两个基础功能:依赖关系扫描和代码扫描。

4.1. 依赖关系扫描

要使用Snyk CLI对项目进行依赖关系扫描,只需键入:

$ snyk test

这个命令将分析项目的依赖关系并识别任何问题。 Snyk将提供详细报告,显示漏洞的严重性级别以及受影响的包:

[...]
Package manager:   gradle
Target file:       build.gradle
Project name:      snyktest
Open source:       no
Project path:      [...]
Licenses:          enabled

✔ Tested 7 dependencies for known issues, no vulnerable paths found.

4.2. 代码扫描

我们还可以在Snyk页面的设置中启用静态代码分析,并扫描我们自身代码中的漏洞

$ snyk code test
[...]

✔ Test completed

Organization:      [...]
Test type:         Static code analysis
Project path:      [...]

Summary:

✔ Awesome! No issues were found.

5. 使用Gradle集成

除了使用Snyk CLI,我们还可以使用Gradle插件,在构建过程中自动运行Snyk测试。 首先,我们需要在build.gradle文件中添加插件:

plugins {
    id "io.snyk.gradle.plugin.snykplugin" version "0.5"
}

然后,我们可以选择提供一些配置

snyk {
    arguments = '--all-sub-projects'
    severity = 'low'
    api = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
}

但在大多数情况下,默认设置就足够了。如果之前通过CLI进行了认证,我们不需要提供API密钥。最后,要运行测试,只需键入:

$ ./gradlew snyk-test

我们还可以配置Gradle在每次构建时运行Snyk测试:

tasks.named('build') {
    dependsOn tasks.named('snyk-test')
}

需要注意的是,Snyk的免费版每月有限的测试次数,因此频繁运行测试可能会造成浪费。

6. 总结

Snyk Code对于希望在开发生命周期早期发现漏洞和改进应用安全的开发者和组织来说是一个有价值的工具。本文介绍了如何使用Snyk开源和代码功能来扫描项目中的潜在安全问题。此外,我们还探讨了如何将Snyk集成到Gradle构建系统中。