semgrep/semgrep
GitHub: semgrep/semgrep
Stars: 14302 | Forks: 879
以惊人的速度进行代码扫描。
Semgrep 是一款快速、开源的静态分析工具,用于搜索代码、查找 Bug、执行安全防护措施和编码标准。Semgrep [支持 30 多种语言](#language-support),可以在 IDE 中运行,作为预提交检查,以及作为 CI/CD 工作流的一部分。 Semgrep 是代码的语义 grep。虽然运行 `grep "2"` 只会匹配确切的字符串 _2_,但 Semgrep 在搜索 _2_ 时可以[匹配 `x = 1; y = x + 1`](https://semgrep.dev/playground/s/5rKgj)。Semgrep 规则看起来就像你已经在编写的代码;不需要抽象语法树、正则表达式博弈或痛苦的 DSL。 请注意,在安全上下文中,Semgrep 社区版会遗漏许多真正的阳性结果,因为它只能分析单个函数或文件边界内的代码。如果你想将 Semgrep 用于安全目的(**SAST**、**SCA** 或**机密扫描**),强烈建议使用 Semgrep AppSec 平台,因为它增加了以下关键功能: Semgrep AppSec 平台开箱即用,拥有涵盖 SAST、SCA 和机密的 20000 多条专有规则。Pro 规则由 Semgrep 安全研究团队编写和维护,具有很高的准确性,这意味着 AppSec 团队可以放心地将发现直接带给开发人员,而不会拖慢他们的速度。 Semgrep 在你的计算机或构建环境中本地分析代码:**默认情况下,代码永远不会被上传**。[开始使用 →.](#getting-started-)
### 语言支持
**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, etc.)
**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)
有关更多信息,请参阅[支持的语言](https://semgrep.dev/docs/supported-languages/)。
### 开始使用 🚀
对于新用户,我们建议从 [Semgrep AppSec 平台](#option-1-getting-started-from-the-semgrep-appsec-platform-recommended)开始,因为它提供了可视化界面、演示项目、结果分类和探索工作流,并使 CI/CD 中的设置变得快速。扫描仍然是本地的,代码不会被上传。或者,你也可以从 CLI 开始,通过终端输出运行一次性搜索。
### 选项 1:从 Semgrep Appsec 平台开始使用(推荐)
### 注意事项:
如果有任何问题,请在 Semgrep Slack 中寻求帮助。
### 选项 2:从 CLI 开始使用
### Semgrep 生态系统
Semgrep 生态系统包括以下内容:
其他资源:
加入已经在 GitLab、Dropbox、Slack、Figma、Shopify、HashiCorp、Snowflake 和 Trail of Bits 等公司使用 Semgrep 的数十万其他开发人员和安全工程师的行列。
Semgrep 由 [Semgrep, Inc.,一家软件安全公司](https://semgrep.dev)开发并提供商业支持。
### Semgrep 规则
Semgrep 规则看起来就像你已经在编写的代码;不需要抽象语法树、正表达式博弈或痛苦的 DSL。这是一个用于查找 Python `print()` 语句的快速规则。
在 Semgrep 的 Playground 中通过[点击此处](https://semgrep.dev/playground/r/3qUzQD/ievans.print-to-logger)在线运行它。
#### 示例
访问[文档 > 规则示例](https://semgrep.dev/docs/writing-rules/rule-ideas/)了解用例和想法。
| 用例 | Semgrep 规则 |
| :-------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 禁用危险的 API | [阻止使用 exec](https://semgrep.dev/playground/s/lglB) |
| 搜索路由和认证 | [提取 Spring 路由](https://semgrep.dev/playground/s/Y6wD) |
| 强制使用安全默认值 | [安全地设置 Flask cookies](https://semgrep.dev/playground/s/6KwW) |
| 污点数据流入接收点 | [ExpressJS 数据流进入 sandbox.run](https://semgrep.dev/playground/s/qEpR) |
| 强制执行项目最佳实践 | [使用 assertEqual 进行 == 检查](https://semgrep.dev/playground/s/oEox), [始终检查 subprocess 调用](https://semgrep.dev/playground/s/zENk) |
| 将项目特定知识代码化 | [在执行事务之前验证它们](https://semgrep.dev/playground/s/p8zk) |
| 审计安全热点 | [在 Apache Airflow 中查找 XSS](https://semgrep.dev/playground/s/KPwj), [硬编码凭证](https://semgrep.dev/playground/s/2Br8) |
| 审计配置文件 | [查找 S3 ARN 用法](https://semgrep.dev/playground/s/jEKD) |
| 从已弃用的 API 迁移 | [DES 已弃用](https://semgrep.dev/playground/r/java.lang.security.audit.crypto.des-is-deprecated.des-is-deprecated), [已弃用的 Flask API](https://semgrep.dev/playground/r/python.flask.maintainability.deprecated.deprecated-apis.flask-deprecated-apis), [已弃用的 Bokeh API](https://semgrep.dev/playground/r/python.bokeh.maintainability.deprecated.deprecated_apis.bokeh-deprecated-apis) |
| 应用自动修复 | [使用 listenAndServeTLS](https://semgrep.dev/playground/s/1Ayk) |
### 扩展
访问[文档 > 扩展](https://semgrep.dev/docs/extensions/)了解如何在你的编辑器或预提交中使用 Semgrep。当集成到 CI 中并配置为扫描拉取请求时,Semgrep 将只报告该拉取请求引入的问题;这让你可以在不修复或忽略现有问题的情况下开始使用 Semgrep!
### 文档
浏览网站上的完整 Semgrep [文档](https://semgrep.dev/docs)。如果你是 Semgrep 新手,请查看[文档 > 开始使用](https://semgrep.dev/docs/getting-started/)或[交互式教程](https://semgrep.dev/learn)。
### 指标
使用来自[注册表](https://semgrep.dev/r)的远程配置(如 `--config=p/ci`)会将匿名的规则指标报告给 semgrep.dev。
当使用来自本地文件的配置(如 `--config=xyz.yml`)时,只有在用户登录时才会发送指标。
要禁用注册表规则指标,请使用 `--metrics=off`。
Semgrep [隐私政策](https://semgrep.dev/docs/metrics)描述了指导数据收集决策的原则,以及在启用指标时收集和不收集的数据的细分。
### 更多
### 升级
要升级,请运行与你安装 Semgrep 的方式相关的以下命令:
```
# Using Homebrew
$ brew upgrade semgrep
# Using pip
$ python3 -m pip install --upgrade semgrep
# Using Docker
$ docker pull semgrep/semgrep:latest
```
标签:AST分析, CI/CD 集成, Debian包, DevSecOps, Docker‑Compose, GUI应用, Java RMI, MongoDB安全, NoSQL注入, pip安装, Rust语言, SAST, Semgrep, Web安全扫描, Web安全扫描, Web安全扫描, Web安全扫描, Web界面, WordPress安全扫描, 上游代理, 二进制文件分析, 代码扫描, 代码质量, 多语言支持, 安全审计, 安全测试框架, 带宽管理, 开源安全, 模式匹配, 流量可视化, 漏洞检测, 用户界面自定义, 盲注攻击, 自动化安全测试, 自动化资产收集, 软件供应链安全, 远程方法调用, 错误基检测, 静态代码分析
