本文目录导读:

我来帮您介绍SonarQube代码质量检测中常见的漏洞类型及修复方法。
常见漏洞类型
注入漏洞 (Injection)
// ❌ 危险代码 String query = "SELECT * FROM users WHERE id = " + userId; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query); // ✅ 安全代码 String query = "SELECT * FROM users WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setString(1, userId); ResultSet rs = pstmt.executeQuery();
跨站脚本 (XSS)
// ❌ 危险代码
document.getElementById('output').innerHTML = userInput;
// ✅ 安全代码
document.getElementById('output').textContent = userInput;
// 或使用安全的HTML编码
敏感信息泄露
// ❌ 危险代码
String password = "123456"; // 硬编码密码
logger.info("密码是: " + password);
// ✅ 安全代码
// 使用环境变量或配置中心
String password = System.getenv("DB_PASSWORD");
logger.info("密码验证成功"); // 不记录敏感信息
修复策略
输入验证
public void processInput(String input) {
// 白名单验证
if (!input.matches("[a-zA-Z0-9]+")) {
throw new IllegalArgumentException("非法输入");
}
// 后续处理
}
输出编码
// HTML编码 String safeOutput = StringEscapeUtils.escapeHtml4(userInput); // URL编码 String safeUrl = URLEncoder.encode(userInput, "UTF-8");
安全配置
# application.yml
server:
# 禁用HTTP
ssl:
enabled: true
# 设置安全头
headers:
x-frame-options: DENY
x-content-type-options: nosniff
SonarQube规则配置
自定义规则
{
"qualityProfile": {
"name": "自定义安全规则",
"rules": [
{
"repositoryKey": "java",
"ruleKey": "S2077",
"severity": "CRITICAL"
}
]
}
}
忽略特定警告
// 使用 @SuppressWarnings
@SuppressWarnings("squid:S2077")
public void legacyMethod() {
// 已知安全的遗留代码
}
最佳实践
定期扫描
- 设置CI/CD流水线自动执行
- 每次代码提交后触发扫描
- 定期(如每周)完整扫描
漏洞管理
严重等级处理策略:
- Blocker: 立即修复
- Critical: 24小时内修复
- Major: 本周内修复
- Minor: 本月内修复
安全编码标准
// 使用现代加密算法
public class SecurityConfig {
// 使用BCrypt而非MD5
private static final PasswordEncoder encoder =
new BCryptPasswordEncoder();
public String hashPassword(String password) {
return encoder.encode(password);
}
}
工具集成
Maven配置
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.0.2155</version>
<configuration>
<sonar.host.url>http://localhost:9000</sonar.host.url>
<sonar.login>your-token</sonar.login>
</configuration>
</plugin>
GitLab CI配置
sonarqube-check:
stage: test
script:
- sonar-scanner
-Dsonar.projectKey=$CI_PROJECT_NAME
-Dsonar.sources=.
-Dsonar.host.url=$SONAR_HOST_URL
您需要针对具体的漏洞类型提供更多信息吗?或者您遇到了特定的SonarQube规则问题?