news 2026/9/10 8:04:31

Semgrep 静态分析工具:用“长得像代码“的规则,扫出 30+ 种语言的隐藏 Bug

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Semgrep 静态分析工具:用“长得像代码“的规则,扫出 30+ 种语言的隐藏 Bug

Semgrep 静态分析工具:用"长得像代码"的规则,扫出 30+ 种语言的隐藏 Bug

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

如果你需要一个能按语义搜索代码、顺手指向潜在 Bug 和危险写法的工具,那就是 Semgrep 静态分析工具。它支持 30 多种语言,规则直接写成你平时写的源码,不用和正则表达式搏斗,适合想在老项目或新项目里快速加入代码扫描的开发者。

什么情况下你会需要它

老项目里搜索很痛苦。你想统计还有多少地方在用某个旧 API,但 grep 按文本匹配,"eval" 也会撞上 "evaluate",误报一堆。Semgrep 理解代码结构,搜eval(...)只匹配真正的函数调用。

团队约定靠人盯不住。禁止硬编码密钥、上线前不许留print调试语句……把这些写成自动化检查,提交时自动拦截,比 code review 里互相提醒靠谱。

安全审计不用从零开始。一条命令扫完整仓库,命中项带文件名、行号和规则说明,从 0 到第一份漏洞清单只花几分钟。

5 分钟装好 Semgrep 静态分析工具 ⚡

只需要一个 Python 3 环境。最常用的装法:

pip install semgrep # macOS 上也可以用 Homebrew brew install semgrep

装完用semgrep --version确认一下。不想动本地环境的话,直接跑 Docker 也行,官方镜像里工具已经就绪。

Semgrep 静态分析工具的首次扫描配置

在项目根目录建一个my-rule.yml,内容就是这么短:

rules: - id: no-print pattern: print(...) message: 用 logging 代替 print languages: [python] severity: INFO

含义很直白:找出 Python 代码里所有print(...)调用。$开头的元变量是它的灵魂——写$X == $X就能抓到"比较两边写成了同一个变量"的笔误,这是纯文本搜索做不到的。

然后在项目目录执行:

semgrep --config my-rule.yml .

终端会像下面这样列出每条命中:规则名、文件、行号、说明。

想学更复杂的写法,可以直接看 semgrep.yml——这是 Semgrep 用来检查自己代码的规则文件,算是"自己扫自己"的活教材。

进阶技巧 / 常见问题

误报了怎么办?规则里加pattern-not把例外排除掉,或者用paths.exclude跳过特定目录;命令行也可以--exclude快速跳过。

哪些文件不想扫?默认会跳过 git 忽略的文件;更精细的控制,在项目根建一个.semgrepignore,一行写一个路径。

发现之后能自动修吗?能。规则里加一个fix字段,再跑semgrep --fix,比如把List.map2一键替换成更安全的List_.map2

代码会被上传吗?不会。分析全部在本地完成,代码不出你的机器,私有代码库也放心用。

下一步

拿你手头的项目跑一遍semgrep --config auto,再翻翻 tests/patterns/ 目录,里面按语言整理了大量现成的 pattern 示例,照着改就是你自己的第一条规则。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 8:01:18

Harbor 开源贡献指南:从 Fork 到合入的完整实战流程

Harbor 开源贡献指南:从 Fork 到合入的完整实战流程 【免费下载链接】harbor An open source trusted cloud native registry project that stores, signs, and scans content. 项目地址: https://gitcode.com/GitHub_Trending/ha/harbor 本篇指南围绕 Harbo…

作者头像 李华
网站建设 2026/9/10 8:01:08

四代YOLO+SpringBoot+双大模型:安全锥检测系统的工程化落地全解析

先说一个反直觉的结论:安全锥检测这个任务,在YOLO官方预训练模型里连一个类别都不占,但真正把它做成一套能落地的系统时,牵扯到的工程量往往比“人脸检测”还要多。原因很简单——这是一个典型的复合型工程:前面是YOLO…

作者头像 李华
网站建设 2026/9/10 8:00:38

Agent生产化第一步:高质量数据接入四步法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 7:59:20

Sourcetrail 代码可视化工具:快速看懂陌生代码库的完整指南

Sourcetrail 代码可视化工具:快速看懂陌生代码库的完整指南 【免费下载链接】Sourcetrail Sourcetrail - free and open-source interactive source explorer 项目地址: https://gitcode.com/GitHub_Trending/so/Sourcetrail 接手一个几万行的旧项目&#xf…

作者头像 李华
网站建设 2026/9/10 7:58:15

MATLAB+HFSS的罗特曼透镜轮廓计算与自动化建模

简介:这是一套罗特曼透镜设计与HFSS链接的Matlab程序包,面向电子信息工程、通信工程及数学等专业学生,用于课程设计、期末大作业或毕业设计中的透镜仿真与性能分析。程序支持Matlab2014/2019a/2024a,采用参数化编程,关…

作者头像 李华
网站建设 2026/9/10 7:54:30

污水处理自动化项目实战:博图V16程序模板与电气图纸的IO规划

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华