资讯动态

用 5 行规则扫出整个代码库的漏洞:Semgrep 静态分析上手指南

发布时间:2026/9/10 17:30:00 来源:尧图企业网站定制
用 5 行规则扫出整个代码库的漏洞Semgrep 静态分析上手指南【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrep一个 PR 里混进一行硬编码密钥、一行遗留的print靠人眼 review 还能稳定接住吗Semgrep是一个开源、轻量的静态分析工具你用类源码风格的 pattern 写规则它对 30 多种语言做代码漏洞检测与 bug 变体扫描可以跑在本地终端、pre-commit 或 CI/CD 流水线里。从一次真实扫描说起字符串 grep 差在哪先看效果在终端执行semgrep scan --config auto它会列出每条发现的规则 ID、说明文字并高亮命中的那一行源码。这和grep的差距不在速度而在看到什么。对字符串做grep foo(只能精确命中foo(这个写法参数换个变量名、中间加一行空行就可能漏掉而 Semgrep 是先理解代码结构再去比对所以能抓到同一个问题的不同变体写法——README 里有个直观例子搜语义上的2它甚至能命中x 1; y x 1因为比较的是含义而非字符。从源码到命中AST 分析的三步流水线理解是怎么做到的拆解成三步前端解析每种语言有自己的解析器把源码变成该语言的语法树各语言解析器集中在 languages/ 目录部分前端基于 Tree-sitter 构建。归一化各语言语法树统一转成一棵通用抽象语法树generic AST核心逻辑在 src/parsing/。打个比方各国选手用各自方言交卷判分程序先把所有答卷翻译成标准记号再统一判分。模式匹配你的规则同样被解析成树然后和目标代码的树做逐节点的结构比对匹配引擎在 src/matching/ 目录。正是第 2 步让核心匹配逻辑只写一份就能覆盖几十种语言。写第一条规则YAML 里直接嵌源码规则就是一个 YAML 文件pattern 部分用目标语言原样书写rules: - id: hardcoded-credential languages: [python] severity: ERROR message: 密钥不应硬编码在仓库里 pattern: $VAR password需要新学的只有两个符号...省略号通配占位符匹配任意数量的参数或表达式。print(...)表示任何参数的 print 调用。$X元变量有名字的占位符记住命中的内容供后续复用$X $X就能抓到任何变量和自己比较的无效代码。进阶规则语法排除误报与二次过滤写规则到一定阶段最常用的是下面几种组合语法作用典型场景pattern-not从命中里减去子集检测$DB.execute(... $INPUT)拼接 SQL再排除参数化写法metavariable-pattern对已命中的元变量做二次过滤只对$F的路径含/etc/的open($F)报警patterns/pattern-either多模式 AND / OR同一函数里既出现反序列化又出现用户输入涉及用户输入流入危险函数这类跨语句问题时引擎会切换到污点分析路径相关实现在 src/tainting/ 目录——这就是SQL 注入防护这类规则背后的原理。AST-based Autofix不只报问题还能直接改发现漏洞之后能不能顺手改掉可以。加上--autofixSemgrep 会把命中代码按修复模板替换且替换发生在 AST 层面改完的代码结构依然合法不是粗暴的字符串拼接。仓库 tests/autofix/ 里就有真实用例Python 目录下规则命中foo(3)修复模板为bar($X * 2)# 修复前被规则命中 foo(3) # 修复后$X 原样带出 3 bar(3 * 2)修复模板还能用正则捕获组、...通配实现逻辑集中在 src/fixing/。接下来跑在哪从本地 CLI 到 CI 流水线本地pip install semgrep装好后一条semgrep scan就能扫完整个仓库不装环境也可以直接在 Semgrep Playground 网页上写规则试跑。流水线接入 GitHub Actions、GitLab CI、Jenkins 等让每个 PR 合并前自动过一遍规则。想抄作业的话tests/rules/ 目录下的官方规则与测试用例值得逐条读规则写法基本都覆盖到了。下一步建议翻一遍 README.md 的 Quick Start再到 Playground 里给自己项目写第一条规则。技术细节以仓库最新版本为准。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价