mcpField
S
Semgrep

Semgrep

官方Agent-ready
github.com开发者工具17.3ksemgrep6 天前更新
代码仓库访问官网

关于 Semgrep

Semgrep 使用语义分析在多种语言中查找漏洞、安全漏洞和代码质量问题。它提供预构建的规则集用于安全审计,并与 CI 管道集成以便及早发现问题。

主要功能

  1. 01扫描代码以查找安全漏洞和逻辑错误
  2. 02使用预构建规则包(如 p/security-audit)处理特定问题
  3. 03在 CI/CD 管道中运行自动化分析
  4. 04定义自定义检测规则以匹配代码库特定的模式

适用场景

  1. 01在拉取请求中检测常见安全漏洞
  2. 02自动强制执行代码质量和正确性标准
  3. 03根据安全基准扫描多个仓库
  4. 04查找特定语言的反模式和错误配置

安装

选择你的系统或包管理器,复制命令到终端运行。

$
pipx install semgrep

安装完成后运行semgrep --version确认安装成功。

命令示例

常用命令按使用顺序排列。

01
semgrep scan --config auto
02
semgrep scan --config p/security-audit

详细介绍


Semgrep 徽标

极速代码扫描。

Homebrew PyPI 文档 加入 Semgrep 社区 Slack 欢迎提交问题! 在 GitHub 上为 Semgrep 点星 Docker 拉取次数 Docker 拉取次数(旧版) 在 Twitter 上关注 @semgrep


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,因为它还提供以下关键能力:

  1. 增强核心分析能力(跨文件、跨函数、数据流可达性),可将误报减少 25%,并将检测到的真实问题增加 250%
  2. 使用 Semgrep Assistant(AI)对发现结果进行上下文后处理,进一步将噪声减少约 20%。此外,Assistant 会为发现结果补充量身定制、循序渐进的修复指导,超过 80% 的情况下,人们认为这些指导具有可操作性。
  3. 可自定义的策略,并能无缝集成到开发者工作流中,让安全团队精细控制向开发者展示不同发现结果的位置、时机和方式(IDE、PR 评论等) Semgrep AppSec Platform 开箱即用,提供覆盖 SAST、SCA 和机密信息的 20000+ 条专有规则。专业版规则由 Semgrep 安全研究团队编写并维护,准确度很高,因此 AppSec 团队可以放心地将发现的问题直接交给开发者,而不会拖慢他们的工作进度。

Semgrep 在你的计算机或构建环境中本地分析代码:默认情况下,代码绝不会上传。开始使用 →。

Semgrep CLI 图片
语言支持

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)

更多信息请参阅支持的语言。

开始使用 🚀
  1. 通过 Semgrep AppSec Platform
  2. 通过 CLI

对于新用户,我们建议从 Semgrep AppSec Platform 开始,因为它提供可视化界面、演示项目、结果分类与探索工作流,并能加快 CI/CD 配置。扫描仍在本地进行,代码不会上传。你也可以选择从 CLI 开始,通过终端输出浏览结果并执行一次性搜索。

选项 1:通过 Semgrep Appsec Platform 开始(推荐)

Semgrep 平台图片

  1. 在 semgrep.dev 注册

  2. 查看演示发现结果,了解 Semgrep 的工作方式

  3. 前往 Projects > Scan New Project > Run scan in CI 扫描你的项目

  4. 选择你的版本控制系统,并按照引导步骤添加项目。完成此设置后,Semgrep 会在每次拉取请求后扫描你的项目。

  5. [可选] 如果你想在本地运行 Semgrep,请按照 CLI 部分中的步骤操作。

说明:

如遇到问题,请在 Semgrep Slack 中寻求帮助。

选项 2:从命令行开始
  1. 安装 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
    
  2. 运行 semgrep login,创建账号并登录 Semgrep。此步骤为可选,但登录 Semgrep 后,你可以使用:

  3. 进入应用的根目录并运行 semgrep ci。这将扫描你的项目,检查源代码及其依赖项中的漏洞。

  4. 使用 -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 中在线运行。

用于查找 Python print() 语句的 Semgrep 规则示例

示例

访问文档 > 规则示例,了解使用场景和创意。

使用场景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 的隐私政策介绍了指导数据收集决策的原则,以及启用指标时收集和不收集的数据明细。

更多
升级

要升级,请运行与你安装 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

评论

支持 Markdown