在漏洞发布前捕获:本地 SonarQube 设置(第2部分)
Source: Dev.to
介绍
静态应用安全测试(SAST)是软件安全开发生命周期(SSDLC)中的关键实践,能够帮助开发者在代码开发阶段及早发现安全漏洞。理解 SAST 的概念固然重要,但在实际项目中有效实施它,才是确保软件交付稳健安全的关键。
在本系列 SAST 的第二篇中,我们将重点介绍如何将 SonarQube Cloud(一种流行的静态分析工具)集成到 IntelliJ IDEA 并通过 Docker 运行。我们将探讨:
- 用于 SAST 的 SonarQube Cloud
- 通过 IntelliJ IDEA 使用 SonarQube Cloud 进行本地扫描
- 使用 Docker Compose 与 SonarQube 镜像进行本地扫描
工具: SonarQube Cloud、Spring Boot、IntelliJ IDEA、Docker‑Compose
前置条件: 使用 IntelliJ IDEA 或 Spring Boot Initializr 创建一个 Spring Boot 项目( )。
SonarQube Cloud
SonarQube Cloud 提供了一种无需自行管理基础设施即可开始静态代码分析的便捷方式。它提供云托管的扫描功能,能够分析代码质量、安全漏洞、错误以及代码异味。
- 创建账户 – 访问 SonarQube 官方网站,注册免费或付费的云账户。
- 创建新项目 – 填写你的代码仓库信息。
- 生成身份验证令牌 – 在 My Account > Security 中生成令牌,并安全保存(例如,作为 GitHub Actions 的 secret)。
- 配置项目设置 – 根据你的安全策略设置质量门、SLA 和规则。免费账户必须使用默认的质量门。
随后,SonarQube Cloud 成为查看详细安全报告和代码质量指标的中心平台。
SonarCloud
SonarCloud 是一个全托管的 SaaS 平台,用于持续的静态代码分析,旨在检测代码质量问题、安全漏洞以及可维护性风险,适用于现代软件项目。它支持 30 多种编程语言,包括 Java、Python、C#、JavaScript、TypeScript 和 Go。
功能
- 云托管、全托管 – 无需安装、托管或维护。非常适合没有严格合规要求的团队。
- 由 SonarSource 管理 – 负责运行时间、扩展、规则更新、语言分析器以及安全补丁。
- 深度静态分析 – 检测错误、基于 CWE 和 OWASP 的安全问题,如 SQL 注入、路径遍历、输入验证问题、硬编码密钥和命令注入。
- 代码异味 & 认知复杂度 – 标记可维护性问题并衡量代码的理解难度。
- 多语言支持 – Java、Python、JavaScript、TypeScript、Go、C#、Kotlin、PHP、Terraform、YAML 等。
- 无缝 CI/CD 集成 – 原生集成 GitHub Actions、Azure Pipelines、Bitbucket Pipelines、GitLab CI,以及构建工具插件(如 Gradle Sonar 插件)。
- 拉取请求和分支分析 – 在 PR 审查期间提供内联分析(免费计划不提供)。
质量门
质量门定义了代码在合并前必须满足的规则。默认检查包括:
- 没有新的关键或阻断问题。
- 达到最低代码覆盖率阈值。
- 没有新的错误或安全漏洞。
- 没有新的代码重复。
免费计划不支持自定义质量门。
仪表盘 & 通知
- 集中的问题跟踪、历史趋势图、热点安全审查和覆盖率进度。
- 通过 GitHub Checks、GitLab 合并请求、Slack、电子邮件、Webhook 以及开放 API 实现通知和自定义扩展。
在 IntelliJ IDEA 中安装和配置 SonarQube 插件
-
安装插件
- 打开 IntelliJ IDEA → File > Settings > Plugins。
- 搜索 SonarQube 并安装。重启 IDE。
-
生成身份验证令牌
- 前往 SonarCloud 网站 → My Account > Security 或直接访问 。
- 输入令牌名称并点击 Generate Token。
-
配置插件
- 点击 SonarQube 插件图标 → 齿轮图标。
- 添加你的 SonarQube Cloud 服务器 URL 并粘贴生成的令牌。
-
添加连接
- 在 Connection 部分点击 + → 输入连接名称 → Next。
- 粘贴令牌(或在此窗口创建) → Next。
- IDE 将验证连接;成功后会显示认证成功的提示。
-
运行扫描
- 右键项目 → SonarQube → Analyze All Project Files。
- 结果会内联显示;插件会高亮问题并提供指向详细报告的链接。
本地扫描的好处
- 对安全和质量问题提供即时反馈。
- 降低推送含漏洞代码的可能性。
- 通过在开发工作流早期修复问题,节省时间。
使用 Docker Compose 与 SonarQube 镜像进行本地扫描
如果你更倾向于在本地运行 SonarQube,Docker 能够提供一个简易的搭建方式,省去繁琐的安装步骤。
通过 Docker Compose 本地部署 SonarQube
创建一个 docker-compose.yml 文件,内容如下:
version: "3.9"
services:
sonarqube:
image: sonarqube:latest
ports:
- "9000:9000"
environment:
SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
volumes:
sonarqube_data:
sonarqube_extensions:
在项目根目录放置以下 gradle-local.properties 文件(并将其加入 .gitignore):
systemProp.sonar.qualitygate.wait=true
sonar.projectKey=sonarqube_action
启动容器:
docker compose up -d
SonarQube UI 将在 可访问。此时,你可以将本地扫描(通过 IntelliJ 插件或 SonarScanner)指向该实例。