Semgrep 静态代码分析快速上手:5 分钟装好并跑通首次扫描
2026/9/10 22:00:28 网站建设 项目流程

Semgrep 静态代码分析快速上手:5 分钟装好并跑通首次扫描

【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep

Semgrep 是一个快速的开源静态代码分析工具,用看起来像源码的规则找出 bug、安全隐患和不规范的写法。读完这篇,你能在 5 分钟内装好 CLI、写好第一条规则,并对自己的项目跑出一轮真实的扫描结果。

用一次提交前扫描感受语义级代码匹配

先说两个特别常见的痛点:提交代码前想顺手扫一遍有没有硬编码的密钥、误用的敏感 API;或者你想找出代码里所有变量 == 变量这种自我比较的笔误,以及某个废弃函数的所有变体写法。

普通grep在这里会失灵,因为它只认字面文本——grep "2"永远匹配不到x = 1; y = x + 1里的"2"。Semgrep 做的是"语义级 grep":它把代码解析成结构树再匹配,所以规则写成真实的代码片段就行,不用画 AST、也不用和正则表达式搏斗。下面直接跑起来。

一条命令装好 Semgrep 并跑通首次静态代码分析

前置条件一句话:机器上有 Python 3.6+ 和 Git 就够了(macOS 用户也可以用 Homebrew)。

最短路径就是 pip 装官方包:

python3 -m pip install semgrep

装完先确认命令在不在 PATH 里,跑一下版本查询:

semgrep --version

终端打印出形如semgrep 1.x.x的版本号,就说明装好了。不想装的话也可以用容器直接试跑:

docker run -it -v "${PWD}:/src" semgrep/semgrep semgrep --version

然后跑第一次"语义搜索"。这条命令不加载任何规则文件,直接用一条内联模式在 Python 源码里找左右两边是同一变量的==比较——这类比较几乎必然是 bug:

semgrep -e '$X == $X' --lang=py path/to/src

跑完你看到的不是文本行,而是命中点列表:文件路径、行号、以及带高亮语境的代码片段。到这一步,静态代码分析的主链路就算通了。

如果你要参与开发或者需要定制引擎,可以走源码构建,全程四步(需要 dune/opam 环境,make setup会自动拉 OCaml 依赖):

git clone https://gitcode.com/GitHub_Trending/se/semgrep cd semgrep make setup && make core make install && make core-test

make core负责编译核心分析引擎 semgrep-core,make install以可编辑模式安装 Python 端 CLI,最后make core-test跑测试套件,看到测试全过就是通的。

写一份最小规则配置并验证扫描生效 ⚙️

装完第一件事,是往项目根目录放一个semgrep.yml——以后每次扫描,Semgrep 都默认读它。下面这份是十行以内的最小可用配置:

rules: - id: no-print pattern: print(...) message: 调试代码提交前请改用 logger languages: [python] severity: WARNING

逐字段说清含义:id是规则名,报告里去重和定位都靠它;pattern就是真实代码,...是占位符,表示匹配任意参数;message是命中后打印给你的提示;languages声明规则作用的语言;severity是告警级别。不想扫的目录放.semgrepignore里即可,语法和.gitignore一样。

写复杂规则时可以参考本仓库自己的规则集,比如 semgrep.yml,里面有排除路径、多条件组合这些真实用法。

配好后跑这条验证命令,把path/to/src换成你被扫的目录:

semgrep --config semgrep.yml path/to/src

预期输出:开头显示加载了 1 条规则,随后每条print命中都会列出文件、行号和你写的 message。看到no-print名字出现在结果里,整条链路就闭环了。

把 Semgrep 接进 CI/CD 与数据流分析

跑通本地扫描之后,三个方向值得接着探索:

  • 接入 CI/CD:在流水线里执行semgrep ci,它只报告当前 PR 新引入的问题,老代码的存量问题不用先还清就能上线。
  • 数据流与污点分析:想追踪"用户输入流到哪个危险函数"这类跨语句问题,可以看 src/tainting/ 里的分析引擎实现。
  • AI 辅助扫描semgrep mcp会启动一个 MCP 服务器,让 AI 编程助手直接触发扫描,模块在 cli/src/semgrep/mcp/。

更多规则写法、语言支持和 CLI 参考,翻官方文档就齐了,从你现在的配置出发按需取用即可。

【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询