SonarQube 的严重(Critical)级别问题主要集中在安全漏洞和可能导致系统崩溃或数据损坏的代码缺陷。以下是常见的严重场景分类及具体示例:
一、安全漏洞(Security Vulnerabilities)
1. 注入攻击
- SQL 注入:直接拼接用户输入到 SQL 语句中
// 危险:用户输入未做转义String sql = "SELECT * FROM users WHERE username = '" + input + "'";
- 命令注入:执行系统命令时未过滤用户输入
Runtime.getRuntime().exec("rm -rf " + userInput);
- 跨站脚本攻击(XSS):直接将用户输入渲染到页面
document.getElementById("content").innerHTML = userInput; // 可能注入恶意脚本
2. 敏感信息泄露
- 明文存储密码:密码以明文形式存储或传输
String password = "123456"; // 敏感信息硬编码
- 日志中打印敏感数据:将密码、token 等写入日志
logger.info("User login: " + username + ", password: " + password);
3. 认证/授权缺陷
- 未授权访问:缺少身份验证或权限检查
// 危险:未检查用户是否有权限访问资源@GetMapping("/admin/data")public String getAdminData() {return sensitiveData;}
- 硬编码凭证:密钥、密码直接写在代码中
String apiKey = "sk-xxxxxxxxxxxxxxxxxxxx"; // 硬编码密钥
二、代码缺陷(Bugs)
1. 空指针异常(NullPointerException)
- 未做空值检查:直接调用对象方法而不判空
// 危险:user 可能为 nullString name = user.getName();
2. 资源泄漏
- 未关闭资源:文件、数据库连接、流等未在 finally 块中关闭
FileInputStream fis = new FileInputStream("file.txt");// 缺少 try-finally,异常时资源泄漏fis.read();
3. 数组越界
- 未检查数组长度:直接使用索引访问数组
int[] arr = {1, 2, 3};int value = arr[5]; // 数组越界异常
4. 并发安全
- 非线程安全的共享变量:多线程环境下直接修改共享变量
private int counter = 0;// 多线程同时调用会导致计数错误public void increment() {counter++;}
三、性能问题(Performance)
1. 内存泄漏
- 静态集合持有对象引用:导致对象无法被 GC 回收
private static List<Object> cache = new ArrayList<>();public void addToCache(Object obj) {cache.add(obj); // 从未清理,内存持续增长}
2. 低效的算法
- O(n²) 复杂度的嵌套循环:处理大量数据时性能极差
for (int i = 0; i < list.size(); i++) {for (int j = 0; j < list.size(); j++) { ... } // 嵌套循环}
四、代码异味(Code Smells)中的严重问题
1. 死代码
- 永远不会执行的代码:条件永远为 false
if (false) {doSomething(); // 死代码}
2. 方法/类过大
- 单个方法超过数百行:违反单一职责原则,难以维护
public void processOrder() {// 包含订单验证、库存扣减、支付处理、日志记录等多种逻辑}
3. 循环依赖
- 类之间相互依赖:导致模块耦合度高,难以测试和重构
// ClassA 依赖 ClassB,ClassB 又依赖 ClassAclass ClassA { private ClassB b; }class ClassB { private ClassA a; }
五、安全热点(Security Hotspots)
- 潜在风险点:虽不直接构成漏洞,但可能被利用
- 使用
eval()执行动态代码 - 弱加密算法(如 MD5、SHA-1)
- 未验证的反序列化操作
- 使用
总结
SonarQube 的严重级别问题主要聚焦于安全漏洞和致命代码缺陷,这些问题可能直接导致:
- 系统崩溃(如空指针、数组越界)
- 数据泄露(如敏感信息明文存储)
- 安全攻击(如 SQL 注入、XSS)
- 性能灾难(如内存泄漏、低效算法)
建议在 CI/CD 流程中集成 SonarQube,及时发现并修复这些严重问题,确保代码质量和系统安全。
正文完