一、前言 1、什么是SonarQube? SonarQube 是一个开源的代码质量管理平台,主要用于持续检测代码质量、发现漏洞、代码异味(Code Smells)、安全漏洞和重复代码等问题。它帮助开发团队在软件开发过程中自动进行代码审查,从而提升代码的可靠性、可维护性和安全性。
2、SonarQube核心功能 代码静态分析(Static Code Analysis) 自动扫描源代码(无需运行程序) 支持 30+ 编程语言:Java, JavaScript, Python, C#, C/C++, Go, TypeScript, PHP, Kotlin, Ruby 等 检测问题类型: 🔴 Bug(缺陷):可能导致程序崩溃或逻辑错误的代码 🟡 Code Smell(代码异味):结构不良、难以维护的代码(如过长函数、重复逻辑) 🔒 Security Vulnerabilities(安全漏洞):如 SQL 注入、XSS、硬编码密码等 📉 Security Hotspots(安全热点):需要人工审查的可疑代码 🔄 Duplicated Code(重复代码):降低可维护性 📏 代码覆盖率(Coverage):结合单元测试工具(如 JaCoCo, pytest) 质量门禁(Quality Gates) 可自定义规则(如:“新代码必须 0 个 Bug”、“覆盖率 ≥ 80%”) 如果代码不达标,可阻止合并(集成到 CI/CD 流程中) 技术债务估算(Technical Debt) 量化修复所有问题所需的时间(例如:“当前技术债务:28天”) 与 DevOps 工具集成 ✅ Jenkins、GitLab CI、GitHub Actions、Azure DevOps ✅ IDE 插件(IntelliJ, VS Code, Eclipse) ✅ 与 Git 分支、Pull Request 深度集成 3、SonarQube优势 优势 说明 ✅ 官方支持 Java / Spring 内置规则覆盖 Spring Controller、Service、DAO 等常见模式 ✅ 安全漏洞检测(Security Hotspots) 包含 OWASP Top 10(如 SQLi、XSS、CSRF、路径遍历、
硬编码密码等)
✅ 独立于 IDE 通过命令行运行,不依赖 IDEA,无 ReadAction 线程问题
✅ 可视化 Web 报告 清晰展示漏洞位置、风险等级、修复建议
✅ 免费可用(Community Edition) 开源版本已包含基础安全规则
✅ 支持持续集成 可集成 Jenkins、GitLab CI、GitHub Actions
4、SonarQube可以检测哪些漏洞
漏洞类型 规则 ID 说明
SQL Injection java-security 检测字符串拼接 SQL
XSS java-security 检测未转义的用户输入输出到 JSP/HTML
CSRF Misconfiguration java-security 检测 @RequestMapping 未限制方法
Hardcoded Password S2068 检测硬编码密钥
Path Traversal java-security 检测文件路径拼接
Insecure Cryptography S4790 检测 MD5/DES 等弱算法
XXE (XML Injection) S2755 检测未禁用外部实体
二、安装、使用SonarQube
1、启动SonarQube
这里推荐使用Docker启动,最方便快捷,如果没有安装Docker可以参照博主的另一篇文章Windows系统Docker安装使用教程。
win+r输入cmd进入命令行工具或者打开PowerShel工具,输入以下命令启动SonarQube
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube:community 一键获取完整项目代码 bash 如果你没有单独拉取过SonarQube镜像,那么第一次运行会自动拉取镜像,运行速度会相应较慢,等待他运行完即可。
启动完成后可以在Docker desktop容器中看到SonarQube运行情况
在浏览器中输入http://localhost:9000访问,默认的管理员账号密码是admin/admin,首次登录后会强制提示修改密码
2、配置SonarQube 在项目根目录添加sonar-project.properties文件,文件内容如下
项目唯一标识(不能有空格)
sonar.projectKey=my-app
项目名称(可读)
sonar.projectName=My Spring MVC Application
源码目录(相对于当前目录)
sonar.sources=src/main/java
编译后的 .class 目录(关键!用于字节码分析)
sonar.java.binaries=target/classes
如果你是 IDEA 默认编译输出,可能是:
sonar.java.binaries=out/production/project
编码
sonar.sourceEncoding=UTF-8
SonarQube 服务器地址
sonar.host.url=http://localhost:9000
SonarQube User Token
sonar.token=你的token码
(可选)跳过测试代码
sonar.exclusions=src/test/** 一键获取完整项目代码 XML
根据的项目类型选择sonar.java.binaries的路径
需要在SonarQube界面中生成你自己的token码,登录后点击Account-MyAccount,在打开页面中选择Security选项卡,在Generate Tokens填写name后点击Generate生成你的token码,注意,这个码只显示这一次,建议单独复制后保存好,将生成的token码填入properties文件
3、下载并运行 SonarScanner扫描项目 下载地址:sonar-scanner
下载后是一个zip文件
将压缩包解压,路径不要有中文
解压完成后,将\sonar-scanner\bin添加到系统环境path中(这一步不能省略,否则后面无法扫描成功)
在你的项目根目录(含 sonar-project.properties)执行:
先编译项目(确保 .class 存在)
mvn compile
或 IDEA 中 Build → Build Project
运行扫描
sonar-scanner 一键获取完整项目代码 bash 4、查看安全报告 扫描完成后,打开:http://localhost:9000
点击你的项目(My Spring MVC Application)
左侧菜单点击 “Security Hotspots”,你会看到:
高危漏洞(如 SQL 注入、XSS) 中危漏洞(如硬编码密码、弱加密) 每个漏洞的 代码位置、风险描述、修复建议 也可以查看 “Bugs” 和 “Code Smells”
———————————————— 版权声明:本文为CSDN博主「天上的」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/weixin_4403…