跳转至

Snyk 依赖安全扫描

一句话概述:Snyk 是开发者安全平台,在你写代码的时候就自动扫描依赖包中的安全漏洞,并提供一键修复(自动创建升级 PR),支持 npm/pip/Maven/Go 等主流包管理器,免费版够个人用。

核心知识点

概念白话解释
SCA软件组成分析,扫描你用的第三方库有没有已知漏洞
SAST静态应用安全测试,扫描你自己写的代码有没有安全问题
依赖漏洞你引用的库存在安全漏洞,比如 log4j 漏洞
可达性分析2026 新功能,判断漏洞函数是否真的被你的代码调用到
自动修复 PRSnyk 自动创建 GitHub PR 升级有漏洞的依赖
CVSS 评分漏洞严重程度评分,0-10 分,越高越严重
SBOM软件物料清单,列出所有依赖及其版本

安装配置

# 安装 Snyk CLI
npm install -g snyk  # npm 全局安装

# 或者用独立安装
curl -fsSL https://static.snyk.io/cli/latest/snyk-linux -o snyk
chmod +x snyk && sudo mv snyk /usr/local/bin/

# 认证
snyk auth  # 打开浏览器登录(免费注册)
# 或用 Token
snyk auth <your-token>

# 验证
snyk --version  # 查看版本

IDE 集成

VS Code:
1. 扩展商店搜索 "Snyk"
2. 安装 "Snyk Security" 扩展
3. 侧边栏出现 Snyk 图标
4. 实时显示代码中的安全问题

GitHub 集成

1. https://app.snyk.io → Integrations → GitHub
2. 授权 Snyk 访问你的仓库
3. 选择要监控的仓库
4. Snyk 自动扫描并在发现漏洞时创建 PR

基本使用

扫描项目

# 扫描当前项目的依赖漏洞
snyk test  # 扫描 package.json/requirements.txt/go.mod 等
# 输出:
# ✗ 发现 3 个漏洞(1 高危,1 中危,1 低危)
# 每个漏洞显示:包名、版本、漏洞描述、修复建议

# 扫描并显示所有依赖
snyk test --all-projects  # 扫描 monorepo 中的所有项目

# 扫描 Docker 镜像
snyk container test nginx:latest  # 扫描容器镜像中的漏洞

# 扫描 IaC(基础设施即代码)
snyk iac test  # 扫描 Terraform/K8s/CloudFormation 配置

# 扫描自己的代码(SAST)
snyk code test  # 扫描源代码中的安全问题

修复漏洞

# 自动修复
snyk fix  # 自动升级有漏洞的依赖到安全版本
# Snyk 会选择最小的升级路径,尽量不破坏兼容性

# 查看修复建议
snyk test --json | snyk-to-html -o report.html  # 生成 HTML 报告

# 忽略某个漏洞(如果你确认不影响)
snyk ignore --id=SNYK-JS-LODASH-567746  # 按漏洞 ID 忽略
snyk ignore --id=SNYK-JS-LODASH-567746 --reason="我们没用到这个函数"  # 加原因
# 会生成 .snyk 文件记录忽略策略

持续监控

# 把项目注册到 Snyk 持续监控
snyk monitor  # 上传依赖信息到 Snyk 平台
# 新漏洞被发现时会通过邮件/Slack 通知你
# 也会自动创建 Fix PR(如果集成了 GitHub)

高级用法

CI/CD 集成

# .github/workflows/snyk.yml
name: Snyk Security
on: [push, pull_request]
jobs:
  snyk:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: 安装依赖
        run: npm ci

      - name: Snyk 依赖扫描
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: --severity-threshold=high  # 只报高危和严重漏洞

      - name: Snyk 代码扫描
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          command: code test

严重度过滤

snyk test --severity-threshold=high  # 只报告高危和严重漏洞
snyk test --severity-threshold=critical  # 只报告严重漏洞
# 级别:low / medium / high / critical

JSON 输出

snyk test --json  # JSON 格式输出(用于脚本处理)
snyk test --json | jq '.vulnerabilities | length'  # 统计漏洞数
snyk test --sarif  # SARIF 格式(GitHub Security 支持)

策略文件

# .snyk - 忽略策略文件
version: v1.5.0
ignore:
  SNYK-JS-LODASH-567746:
    - '*':
        reason: "我们没用到受影响的函数"
        expires: 2026-12-31T00:00:00.000Z  # 到期后重新提醒
patch: {}

Python 项目扫描

# Python 项目
snyk test --file=requirements.txt  # 指定依赖文件
snyk test --file=Pipfile  # Pipenv 项目
snyk test --file=pyproject.toml  # Poetry 项目
snyk test --command=python3  # 指定 Python 版本

常见报错

报错信息原因解决方案
Authentication required没登录snyk auth 登录
Could not detect package manager找不到依赖文件--file= 指定依赖文件
Failed to get vulns网络问题检查网络连接或代理设置
漏洞太多改不完项目依赖太旧--severity-threshold=high 先修高危
No supported target files detected目录没有已知的项目文件确认在正确的项目目录
Fix PR 跟现有代码冲突升级可能不兼容手动检查并解决冲突

速查表

# CLI 命令
snyk auth                    # 登录认证
snyk test                    # 扫描依赖漏洞
snyk code test               # 扫描代码(SAST)
snyk container test <镜像>   # 扫描容器
snyk iac test                # 扫描 IaC
snyk fix                     # 自动修复
snyk monitor                 # 持续监控
snyk ignore --id=<SNYK-ID>   # 忽略漏洞
snyk policy                  # 查看策略

# 常用参数
--severity-threshold=high    # 严重度过滤
--all-projects               # 扫描所有子项目
--json                       # JSON 输出
--sarif                      # SARIF 输出
--file=<文件>                # 指定依赖文件

# 支持的包管理器
npm / yarn / pnpm      # JavaScript
pip / pipenv / poetry   # Python
maven / gradle          # Java
go mod                  # Go
NuGet                   # .NET
Composer                # PHP
Cargo                   # Rust
CocoaPods               # Swift/iOS

# 免费额度
# 200 次开源测试/月
# 100 次代码测试/月
# 100 次容器测试/月
# 300 次 IaC 测试/月
# 无限的 GitHub 仓库监控

参考:Snyk 官网 | Snyk 文档 | Snyk 漏洞数据库