代码审查报告

src/UserService.java · Java · 8.3s
✖ 执行错误
未配置 sql 语言的 linter,请在设置中添加 vscode-code-reviewer.linters.sql
AI 审查失败: API 请求超时
12
总计问题
3
错误
7
警告
2
建议
🔧 ESLint + PMD 2 4 1
📋 自定义规则 1 1
🤖 AI 审查 2 1
ESLint + PMD · 7 个问题
Linter pmd:AvoidUsingHardCodedPassword 硬编码密码:密码不应硬编码在代码中 L13
原文: Hard-coded password detected (DB_PASS) in field definition
将密码移至环境变量或配置中心,通过 system.getenv() 读取,避免硬编码在源码中
Linter pmd:SQLInjection SQL 注入:直接拼接用户输入可能导致 SQL 注入攻击 L18
原文: SQL injection detected: string concatenation in query
改用 PreparedStatement 参数化查询,避免字符串拼接
Linter pmd:CloseResource 资源未关闭:Statement/ResultSet 未在 finally 中关闭 L19
原文: Ensure that resources like Statement and ResultSet are closed
使用 try-with-resources 自动关闭 Statement 和 ResultSet,或确保在 finally 块中关闭它们
Linter pmd:MethodNamingConventions 方法命名不规范:FetchUserById 应以小写字母开头 L37
原文: Method name 'FetchUserById' does not follow camelCase naming convention
将方法名改为 fetchUserById,遵循 Java camelCase 命名规范
Linter pmd:FieldNamingConventions 字段命名:api_key 应使用大写常量命名 L44
原文: Field name 'api_key' does not follow naming convention
对于 static final 常量,应将名称改为 API_KEY 并使用下划线分隔
Linter eslint:no-console 生产代码不应保留 console 语句 L57
原文: Unexpected console statement (no-console)
移除 console.log 调试语句,或使用专门的日志框架替代
Linter pmd:UnusedLocalVariable 未使用的局部变量:unusedVar 已声明但未使用 L56
原文: Avoid unused local variables such as 'unusedVar'
删除未使用的变量声明,或确认是否需要该变量
自定义规则 · 2 个问题
自定义 no-hardcoded-credentials 禁止在代码中硬编码数据库密码和 API Key L13
规则 no-hardcoded-credentials 触发: 禁止在代码中硬编码数据库密码和 API Key
自定义 avoid-console-log 生产代码不应使用 console.log 调试 L57
规则 avoid-console-log 触发: 生产代码不应使用 console.log 调试
AI 审查建议 · 3 条
AI sql-injection SQL注入风险:用户状态参数直接拼接 SQL 查询 L18
getActiveUsers 方法中,status 参数直接拼接到 SQL 查询字符串中,攻击者可传入恶意值导致 SQL 注入。同时缺少对 Connection 为 null 的防御性检查。
🎯 安全漏洞
使用 PreparedStatement 参数化查询;添加 Connection 非空校验;使用 try-with-resources 管理资源
- String query = "SELECT username FROM users WHERE status = '" + status + "'"; + String query = "SELECT username FROM users WHERE status = ?"; + PreparedStatement ps = conn.prepareStatement(query); + ps.setString(1, status); + ResultSet rs = ps.executeQuery();
AI hardcoded-secret 硬编码密钥:数据库密码和 API Key 直接写在源码中 L13
DB_PASS 和 api_key 都是敏感凭据,硬编码在类中会导致密钥泄露。任何有权访问代码的人(包括通过反编译 .class 文件)都可获取这些凭据。
🎯 安全漏洞
使用环境变量或密钥管理服务(如 Vault)存储敏感信息,在运行时注入
- private static final String DB_PASS = "admin123"; + private static final String DB_PASS = System.getenv("DB_PASS");
AI unused-method 未使用的公共方法:unusedMethod 疑似死代码 L55
unusedMethod 方法仅在 main 中未被调用,且其内部存在 DEBUG 打印和未使用的局部变量,可能是开发阶段遗留的测试代码,建议确认后删除。
🎯 代码设计