☰
Semgrep:提交前 30 秒扫一遍代码的静态分析工具
2026/10/10 10:59:05 网站建设 项目流程

Semgrep:提交前 30 秒扫一遍代码的静态分析工具

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

code review 时最烦的不是读新代码,而是把 diff 里每个改动都往安全写法的角度上对一遍,还总漏。Semgrep 的思路很直接:用一段长得像源码的模式去匹配代码,漏掉的pickle、缺参数的exec这类问题,30 秒内列给你看。

装完直接跑,先扫出存量问题

克隆仓库装依赖

git clone https://gitcode.com/GitHub_Trending/se/semgrep cd semgrep pip install -e .

跑一次 baseline,只看新增问题

全量扫描的噪音很大,老代码里的历史欠账会把新问题淹没。--baseline-commit只报告相对基线提交新增的发现,提 PR 前拿上一个提交做基线最合适:

semgrep scan --config auto --baseline-commit HEAD~1

默认配置会自动按项目里出现的语言挑规则,跑完的输出长这样,左边是命中数,右边是具体代码行:

只扫要审的目录

--include和--exclude接受 glob,把测试目录、生成代码挡在外面:

semgrep scan --config auto --exclude tests --exclude node_modules

写一条规则,抓住你团队的坏味道

从内置规则里抄一段

官方规则集就在仓库里,Python 安全规则 这种写法可以直接改着抄。下面是抓pickle的典型片段:

rules: - id: no-pickle languages: [python] severity: ERROR message: 别反序列化不可信数据,换 json pattern: pickle.loads(...)

pattern支持省略参数,pickle.loads(x)、pickle.loads(data, protocol=4)都能命中,不用写死参数。

存到项目里跑一次验证

规则放进仓库根目录的semgrep.yml,然后:

semgrep scan --config semgrep.yml

命中时会在输出里带上代码行和 message,reviewer 一眼能看懂问题出在哪:

接进流水线,提交即检查

GitHub Actions 加一个 job

- name: Semgrep run: | pip install semgrep semgrep scan --config auto --error

--error让命中非零退出,CI 直接红掉,问题拦在合并之前。

其他平台同样一个命令

GitLab CI、Jenkins 都是跑同一条semgrep scan,只是位置不同;仓库里 e2e 测试用的多语言目标项目 可以直接当扫描对象试。官方面向 CI 的命令在 cli/src/semgrep/commands/ci.py,会多输出 SARIF,方便平台展示。

扫得慢、噪音大?三个参数收一收

指定规则子集

auto会拉全部适用规则,大仓库明显变慢。只留你关心的几个文件:

semgrep scan --config perf/r2c-rules/python.yml --config perf/r2c-rules/javascript.yml

按规则 id 静音

某条规则误报多,不用删规则,按 id 静音:

semgrep scan --config auto --exclude-rule no-pickle

开满并行

默认线程数保守,CI 机器配置好的话直接拉高:

semgrep scan --config auto --jobs 16

把no-pickle这条规则存到仓库根目录,CI 里换成--config semgrep.yml --error,下次提交就有机器帮你盯着 diff 了。

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

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

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

立即咨询