本文目录导读:
- 主流编程语言专用工具
- 安全专项分析工具(SAST - Static Application Security Testing)
- 基础设施即代码(IaC)与配置文件
- 通用/多语言工具
- 如何选择?(决策树)
- 如果你只能记三个工具
静态分析工具的选择取决于你分析的对象(编程语言、代码库规模、目标)以及分析的目的(安全漏洞、代码质量、合规性等),以下按主流语言和场景分类整理:
主流编程语言专用工具
Java / Kotlin / JVM 生态
- SonarQube:最流行的平台级工具,支持多语言,集成度高,提供持续检查、质量门禁和丰富的规则(安全、异味、覆盖率)。
- SpotBugs(旧称 FindBugs):专注于发现 Java 字节码级别的 Bug 模式(如空指针、未关闭资源)。
- PMD / Checkstyle:PMD 侧重代码风格和潜在缺陷,Checkstyle 侧重代码规范(如 Google 或 Sun 编码风格)。
- Error Prone:Google 出品,比 SpotBugs 更现代,与 Bazel / Maven / Gradle 集成良好。
- Semgrep:近年来非常流行,支持自定义规则(类似 grep 但能理解代码结构),非常适合安全团队编写轻量规则。
JavaScript / TypeScript / Node.js
- ESLint:绝对主流,核心是代码风格和质量,通过插件(如
eslint-plugin-security)扩展安全检测。 - TypeScript 编译器本身(
tsc --noEmit):配合strict模式,是 TS 项目最强的静态类型检查。 - SonarJS:SonarQube 的 JS/TS 模块,适合企业级质量门禁。
- jshint / JSLint:较老,但仍有少量项目在用。
- Flow:Facebook 出品的 JS 静态类型检查器(已较少使用)。
Python
- Pylint:老牌工具,检查错误、代码风格、复杂度。
- pyflakes / pycodestyle:前者快速检查错误,后者检查 PEP8 编码风格。
- mypy:最重要——Python 的可选静态类型检查器,能发现类型相关的隐性 Bug。
- Bandit:专门用于安全漏洞检测(如 SQL 注入、命令注入)。
- Semgrep(同上):支持 Python 规则自定义检测。
C / C++
- Clang Static Analyzer(通过
clang-tidy或scan-build使用):基于 Clang 编译器,深度分析指针、内存泄漏、并发问题。 - Clang-Tidy:既做代码样式也做安全检查(如开启
clang-analyzer-*检查器)。 - Cppcheck:轻量级,跨平台,易于集成到 CI。
- PVS-Studio:商业软件,但发现逻辑错误能力很强(可申请免费许可证用于开源项目)。
- Coverity / Klocwork:行业标准商业工具(适合关键系统、汽车、航空)。
Go
- go vet:官方工具,内置于 Go 工具链,检查可疑结构。
- staticcheck:Go 社区最流行的第三方静态分析,非常可靠,规则丰富。
- golangci-lint:整合了多个 linter(如
staticcheck、govet、errcheck、ineffassign),建议直接使用。 - gosec:专门检查 Go 安全漏洞(如硬编码密码、SQL 注入)。
Rust
- Clippy:Rust 官方 linter(由 rustup 提供),检查常见反模式、性能陷阱。
- rustc 自身的类型和借用检查:这是 Rust 最大的静态分析能力——在编译期消除内存安全错误。
- miri:对 unsafe 代码进行更严格的运行时(非编译期)模式检查,可视为运行时静态分析器。
安全专项分析工具(SAST - Static Application Security Testing)
这类工具专注于发现安全漏洞(如注入、XSS、逻辑缺陷),通常支持多种语言。
| 工具 | 特点 | 适用场景 |
|---|---|---|
| Semgrep | 规则可自定义(像写代码一样写规则),轻量,支持多语言,适合集成到 CI | 快速发现自定义安全缺陷,或替代昂贵的商业工具 |
| Checkmarx | 商业 SAST,非常适合企业级、CISO 驱动的安全合规 | 大型代码库,需要准确率高的安全扫描 |
| Fortify(Micro Focus) | 老牌商业 SAST,集成度高 | 银行、政府、金融业 |
| Veracode | SAST + DAST 云平台,不需要本地安装 | 持续集成和云端部署 |
| Bandit(Python) / Gosec(Go) / NodeJsScan(Node) | 单语言轻量安全扫描器 | 快速扫描某个特定语言 |
| KICS | 专门扫描 IaC(基础设施即代码)(如 Terraform、K8s YAML、Dockerfile、CloudFormation) | DevOps / 云原生安全 |
| Trivy | 虽然主要是漏洞扫描(依赖库),但最新版也包含 IaC 静态分析 | 云原生容器/K8s 安全 |
基础设施即代码(IaC)与配置文件
- KICS:上面提到,扫描 Terraform、K8s、Docker、CloudFormation 等。
- TFLint / Checkov:Terraform 特定扫描器。
- Conftest:用 Rego 语言(类似 OPA)编写规则检查任何配置文件(YAML、JSON、Dockerfile)。
- kubeval / kube-linter:Kubernetes 清单文件验证。
通用/多语言工具
- SonarQube/SonarCloud:企业级全栈,支持 30+ 语言。
- Semgrep:目前最灵活的规则引擎,可以处理任何语言的结构化模式匹配。
- CodeQL:GitHub 开发,使用 QL 查询语言编写分析逻辑,免费用于公共仓库(可在 GitHub Action 中运行)。发现深层逻辑漏洞的能力极强,但学习曲线陡峭。
如何选择?(决策树)
-
我是个人开发者/小团队?
- 选语言对应的 Semgrep(多语言)+ golangci-lint(Go)、Clippy(Rust)、ESLint(JS)、mypy(Python)、go vet(Go)。免费、快速、集成到编辑器(VS Code 插件)。
-
我是企业团队,需要合规(如 PCI-DSS、ISO 27001)?
- 选 SonarQube(质量)+ Checkmarx / Fortify / Veracode(安全)。昂贵但合规报告强。
-
我是安全团队,需要深入检查逻辑漏洞?
- CodeQL(深度分析) + Semgrep(广度覆盖自定义规则)。
-
我需要扫描 CI/CD 管道、K8s、容器?
- Trivy(依赖漏洞) + KICS(IaC 错误配置) + Semgrep(自定义安全逻辑)。
如果你只能记三个工具
- 最全能:SonarQube(企业级质量和安全,但需要部署服务器)。
- 最灵活:Semgrep(自定义规则、多语言、零部署成本)。
- 最深度:CodeQL(适合安全研究员或需要挖掘 0-day 的大团队)。
最后提醒:静态分析会产生假阳性,建议不要开启所有规则,先从必查错误(Error 级别)开始,逐步引入质量规则,结合 本地 IDE 插件 + CI 门禁(只阻止新增的 Error)是最佳实践。