sonarlint是intellij idea中最易上手的代码安全插件,安装后默认启用sql注入、硬编码凭证、xxe等关键规则;如需自定义规则(如禁用des加密),须绑定sonarqube服务器同步规则。

IntelliJ IDEA 本身不带原生的“Security”插件,所谓“IDEA代码安全插件Security”是用户对多个第三方静态分析工具的泛称——实际能用、有明确安全检测能力的,主要是 SonarLint、Find Security Bugs(配合 SpotBugs)、immomo(Momo 系列规则)和 Bito AI 的 Security Check 功能。它们定位不同:前两者偏规则扫描,后者偏 AI 辅助诊断。直接装一个叫 “Security” 的插件,大概率搜不到或装错。
SpotBugs + Find Security Bugs:Java 项目最稳的老牌组合
这是目前 Java 工程中落地最广、规则覆盖最全的安全扫描链路,尤其适合 Maven/Gradle 项目且已有 SpotBugs 基础的团队。
-
Find Security Bugs本质是 SpotBugs 的 detector 插件,不是独立运行的工具;必须先装SpotBugs插件,再手动导入findsecbugs-plugin.jar(注意版本匹配,如 SpotBugs 4.8.x 对应 findsecbugs 1.12.0) - IDEA 中启用后,默认不自动扫描整个项目,需右键模块 →
Find Bugs手动触发;扫描结果里 Security 类别需在Settings > Tools > SpotBugs > Detector Configuration中单独勾选 Category →Security下的具体项(如SQL Injection、XSS、Hardcoded Cryptographic Key) - 容易踩的坑:
findsecbugs-plugin.jar放错位置(应放在 IDEA 配置目录下的plugins/spotbugs/lib/,而非项目 lib 目录);或未关闭 SpotBugs 的默认Performance类规则,导致误报淹没安全问题
SonarLint:开箱即用,但自定义规则要连 SonarQube
如果你只想要“装完就能看到 SQL 注入、硬编码密码、XXE”的效果,SonarLint 是最快上手的选择,尤其适合单人开发或小团队快速试水。
- 安装后默认启用
java:S2077(SQL 注入)、java:S2068(硬编码凭证)、java:S2755(XXE)等关键规则,无需额外配置 - 想加公司级规则(比如禁止使用
DES加密、强制所有 Controller 方法加@PreAuthorize),必须绑定SonarQube服务器;本地SonarLint > Rules页面里点Bind to SonarQube,填 URL 和 token 即可同步 - 注意:SonarLint 社区版不支持 XPath 自定义规则编辑,只能用 SonarQube Web 界面创建,再推送到 IDEA;否则你改了规则 XML 也刷不出来
immomo 插件:专治 MyBatis/JSON 反序列化类漏洞
如果你的项目重度依赖 MyBatis(XML 或注解)、Fastjson/Jackson、Spring Security,immomo 是目前唯一提供「一键修复」能力的插件,修复动作直接写进代码,不是只标红。
- 搜索安装插件名是
immomo(不是 “momo” 或 “security”),安装后重启;它会自动监听当前编辑文件,发现Mybatis XML SQL注入漏洞(规则 1004)时,直接给出预编译参数化改写建议 - 对
Fastjson反序列化风险(1007)、Jackson反序列化风险(1006)这类高危问题,它能识别@JsonCreator缺失、defaultTyping开启等模式,并插入@JsonTypeInfo或禁用配置 - 限制很明确:只支持 Java,不支持 Kotlin;且部分修复(如 1014 脆弱摘要算法)仅提示不修复,得手动换
SHA-256替掉MD5
Bito AI 的 Security Check:适合解释型排查,不适合批量扫
当传统规则引擎报了一堆“疑似漏洞”但你拿不准是不是真问题时,Bito AI 的 Security Check 是个好帮手——它不靠 pattern 匹配,而是结合上下文推理风险等级和修复路径。
- 右键选中一段可疑代码(比如含
Runtime.getRuntime().exec()或拼接String.format(..., userinput)的逻辑),选Security Check,它会告诉你:“此处存在命令注入风险,因未校验userinput是否含分号或管道符;建议改用ProcessBuilder并白名单过滤参数” - 它不会扫全项目,也不生成报告,纯交互式;且输出质量依赖 prompt 清晰度——如果只选一行
request.getParameter("id")就查,它可能只说“注意 XSS”,但若你补充注释“这个 id 会直接写入 HTML 响应”,它就能给出HtmlUtils.htmlEscape()的具体调用位置 - 隐私方面放心:
Bito明确声明不上传代码,所有分析在本地完成;但这也意味着它无法感知跨文件调用链(比如 DAO 层拼 SQL + Service 层传参),这点不如 SonarLint 全局分析
真正难的不是选哪个插件,而是怎么让它们不互相打架:比如 SonarLint 报 java:S2077,immomo 报 1004,Bito 却说“此处无风险”。这时候得看具体代码结构、框架版本、运行时配置——插件只是镜子,照出问题,但判读还得靠人。











