关于 Semgrep
Semgrep 使用语义分析在多种语言中查找漏洞、安全漏洞和代码质量问题。它提供预构建的规则集用于安全审计,并与 CI 管道集成以便及早发现问题。
主要功能
- 01扫描代码以查找安全漏洞和逻辑错误
- 02使用预构建规则包(如 p/security-audit)处理特定问题
- 03在 CI/CD 管道中运行自动化分析
- 04定义自定义检测规则以匹配代码库特定的模式
适用场景
- 01在拉取请求中检测常见安全漏洞
- 02自动强制执行代码质量和正确性标准
- 03根据安全基准扫描多个仓库
- 04查找特定语言的反模式和错误配置
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行semgrep --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍
极速代码扫描。
Semgrep 是一款快速、开源的静态分析工具,可搜索代码、发现错误,并落实安全防护措施和编码标准。Semgrep 支持 30 多种语言,可在 IDE 中运行、作为提交前检查运行,也可作为 CI/CD 工作流的一部分运行。
Semgrep 是针对代码的语义 grep。运行 grep "2" 只会匹配精确字符串 2,而 Semgrep 在搜索 2 时会匹配 x = 1; y = x + 1。Semgrep 规则看起来就像你已有的代码;无需抽象语法树、费力折腾正则表达式,也不需要难用的 DSL。
请注意,在安全场景中,Semgrep Community Edition 会漏掉许多真正的问题,因为它只能分析单个函数或文件范围内的代码。如果你想将 Semgrep 用于安全用途(SAST、SCA 或密钥扫描),强烈建议使用 Semgrep AppSec Platform,因为它还提供以下关键能力:
- 增强核心分析能力(跨文件、跨函数、数据流可达性),可将误报减少 25%,并将检测到的真实问题增加 250%
- 使用 Semgrep Assistant(AI)对发现结果进行上下文后处理,进一步将噪声减少约 20%。此外,Assistant 会为发现结果补充量身定制、循序渐进的修复指导,超过 80% 的情况下,人们认为这些指导具有可操作性。
- 可自定义的策略,并能无缝集成到开发者工作流中,让安全团队精细控制向开发者展示不同发现结果的位置、时机和方式(IDE、PR 评论等) Semgrep AppSec Platform 开箱即用,提供覆盖 SAST、SCA 和机密信息的 20000+ 条专有规则。专业版规则由 Semgrep 安全研究团队编写并维护,准确度很高,因此 AppSec 团队可以放心地将发现的问题直接交给开发者,而不会拖慢他们的工作进度。
Semgrep 在你的计算机或构建环境中本地分析代码:默认情况下,代码绝不会上传。开始使用 →。
语言支持
Semgrep Code 支持 30+ 种语言,包括:
Apex · Bash · C · C++ · C# · Clojure · Dart · Dockerfile · Elixir · HTML · Go · Java · JavaScript · JSX · JSON · Julia · Jsonnet · Kotlin · Lisp · Lua · OCaml · PHP · Python · R · Ruby · Rust · Scala · Scheme · Solidity · Swift · Terraform · TypeScript · TSX · YAML · XML · Generic(ERB、Jinja 等)
Semgrep Supply Chain 支持 15 种包管理器中的 12 种语言,包括:
C#(NuGet) · Dart(Pub) · Go(Go modules、go mod) · Java(Gradle、Maven) · Javascript/Typescript(npm、Yarn、Yarn 2、Yarn 3、pnpm) · Kotlin(Gradle、Maven) · PHP(Composer) · Python(pip、pip-tool、Pipenv、Poetry) · Ruby(RubyGems) · Rust(Cargo) · Scala(Maven) · Swift(SwiftPM)
更多信息请参阅支持的语言。
开始使用 🚀
对于新用户,我们建议从 Semgrep AppSec Platform 开始,因为它提供可视化界面、演示项目、结果分类与探索工作流,并能加快 CI/CD 配置。扫描仍在本地进行,代码不会上传。你也可以选择从 CLI 开始,通过终端输出浏览结果并执行一次性搜索。
选项 1:通过 Semgrep Appsec Platform 开始(推荐)
-
在 semgrep.dev 注册
-
查看演示发现结果,了解 Semgrep 的工作方式
-
前往
Projects > Scan New Project > Run scan in CI扫描你的项目 -
选择你的版本控制系统,并按照引导步骤添加项目。完成此设置后,Semgrep 会在每次拉取请求后扫描你的项目。
-
[可选] 如果你想在本地运行 Semgrep,请按照 CLI 部分中的步骤操作。
说明:
如遇到问题,请在 Semgrep Slack 中寻求帮助。
选项 2:从命令行开始
-
安装 Semgrep CLI
# For macOS $ brew install semgrep # For Ubuntu/WSL/Linux/macOS $ python3 -m pip install semgrep # To try Semgrep without installation run via Docker $ docker run -it -v "${PWD}:/src" semgrep/semgrep semgrep login $ docker run -e SEMGREP_APP_TOKEN=<TOKEN> --rm -v "${PWD}:/src" semgrep/semgrep semgrep ci -
运行
semgrep login,创建账号并登录 Semgrep。此步骤为可选,但登录 Semgrep 后,你可以使用:- Semgrep Supply Chain:依赖扫描器,可检测第三方库中可触达的漏洞
- Semgrep Code 的 Pro 规则:由 Semgrep 安全研究团队编写的 600 多条高置信度规则
- Semgrep Code 的 Pro 引擎:先进的代码分析引擎,旨在检测复杂漏洞并减少误报
-
进入应用的根目录并运行
semgrep ci。这将扫描你的项目,检查源代码及其依赖项中的漏洞。 -
使用
-e交互式编写自己的查询。例如,检查 Python 中左右两侧相同的==(可能存在错误):$ semgrep -e '$X == $X' --lang=py path/to/src
Semgrep 生态系统
Semgrep 生态系统包括以下内容:
-
Semgrep Community Edition - 一切功能的核心:开源程序分析引擎。适用于对误报容忍度较高的临时使用场景,例如顾问、安全审计员或渗透测试人员。
-
Semgrep AppSec Platform - 轻松协调并扩展组织范围内的 SAST、SCA 和 Secrets 扫描,避免给开发者造成过多负担。自定义开发者看到的发现结果及其呈现位置,并与 GitHub、GitLab、CircleCI 等 CI 提供商集成。包含免费和付费版本。
-
Semgrep Code (SAST) - 借助能减少噪声、帮助开发者自行快速修复问题的 SAST,切实推进漏洞积压问题的解决,即使开发者没有安全知识也能做到。安全防护措施易于部署,定制化的分步修复指导让开发者不会觉得工作受阻,因此确实会修复问题。
-
Semgrep Supply Chain (SSC) - 高信噪比的依赖扫描工具,可检测开源第三方库和函数中可达的漏洞。
-
Semgrep Secrets (Secrets scanning) - Secrets 检测功能结合语义分析、改进后的熵分析和验证,准确地在开发者工作流中发现敏感凭据。
-
Semgrep Assistant (AI) - Assistant 是一款由 AI 驱动的 AppSec 工程师,帮助开发者和 AppSec 团队大规模确定 Semgrep 发现结果的优先级、进行分类和修复。人类有 97% 的时间认同 Assistant 自动分类的决定,并有 80% 的时间认为生成的修复指导很有帮助。要了解 Assistant 的工作原理,请阅读此概览。
-
-
Semgrep MCP Server - 一个 Model Context Protocol (MCP) 服务,可让 AI 编码助手直接运行 Semgrep 扫描。可与 Cursor、VS Code、Windsurf、Claude Desktop 等集成。运行
semgrep mcp即可在本地启动。- Hooks - 随着你编写代码自动触发 Semgrep 扫描。
- Skills / Prompts - 内置 MCP 提示词(如
write_custom_semgrep_rule)可帮助 AI 助手编写准确的 Semgrep 规则。 - Claude Code plugin - 可在官方市场以及 semgrep/mcp-marketplace 仓库中获取:
/plugin marketplace add semgrep/mcp-marketplace - Cursor plugin - 可在官方市场以及 semgrep/cursor-plugin 仓库中获取。
其他资源:
- Semgrep Playground - 用于编写和分享规则的在线交互式工具。
- Semgrep Registry - 2,000 多条由社区贡献的规则,覆盖安全性、正确性和依赖漏洞。
加入数十万名已经在使用 Semgrep 的开发者和安全工程师行列,他们来自 GitLab、Dropbox、Slack、Figma、Shopify、HashiCorp、Snowflake 和 Trail of Bits 等公司。
Semgrep 由 Semgrep, Inc.,一家软件安全公司开发并提供商业支持。
Semgrep 规则
Semgrep 规则看起来就像你已经在编写的代码;无需抽象语法树、与正则表达式搏斗,也不必使用令人头疼的 DSL。下面是一条用于查找 Python print() 语句的快速规则。
点击此处,即可在 Semgrep Playground 中在线运行。
示例
访问文档 > 规则示例,了解使用场景和创意。
| 使用场景 | Semgrep 规则 |
|---|---|
| 禁止使用危险 API | 禁止使用 exec |
| 搜索路由和身份验证 | 提取 Spring 路由 |
| 强制使用安全默认值 | 安全设置 Flask Cookie |
| 流入接收端的污点数据 | ExpressJS 数据流入 sandbox.run |
| 强制执行项目最佳实践 | 使用 assertEqual 检查 ==,始终检查 subprocess 调用 |
| 将项目专属知识编入规则 | 执行交易前先验证 |
| 审计安全热点 | 查找 Apache Airflow 中的 XSS,硬编码凭据 |
| 审计配置文件 | 查找 S3 ARN 用法 |
| 从已弃用的 API 迁移 | DES 已弃用,已弃用的 Flask API,已弃用的 Bokeh API |
| 应用自动修复 | 使用 listenAndServeTLS |
扩展
访问 文档 > 扩展,了解如何在编辑器或预提交中使用 Semgrep。将 Semgrep 集成到 CI 并配置为扫描拉取请求后,它只会报告该拉取请求引入的问题;这样,你就可以开始使用 Semgrep,而无需修复或忽略已有问题!
文档
浏览网站上的完整 Semgrep 文档。如果你刚开始使用 Semgrep,请查看文档 > 入门或交互式教程。
指标
使用来自 Registry 的远程配置(例如 --config=p/ci)时,会向 semgrep.dev 报告假名化的规则指标。
使用本地文件中的配置(例如 --config=xyz.yml)时,只有用户登录后才会发送指标。
要停用 Registry 规则指标,请使用 --metrics=off。
Semgrep 的隐私政策介绍了指导数据收集决策的原则,以及启用指标时收集和不收集的数据明细。
更多
- 常见问题解答(FAQ)
- 贡献
- 开发者构建说明
- 在 Semgrep 社区 Slack 中提问
- CLI 参考和退出代码
- Semgrep YouTube 频道
- 许可证(LGPL-2.1)
- Semgrep 许可
升级
要升级,请运行与你安装 Semgrep 的方式对应的以下命令:
# Using Homebrew
$ brew upgrade semgrep
# Using pipx
$ pipx upgrade semgrep
# Using uv tool command
$ uv tool upgrade semgrep
# Using Docker
$ docker pull semgrep/semgrep:latest
