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),仅供参考