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
每次提 PR 都要人肉翻 diff 找硬编码密钥和调试代码?Semgrep 安装完一条命令就能扫完整个仓库,把这类问题直接列出来。它把规则写成你平时的源码,按语义而不是按文本匹配——搜 2,连 x = 1; y = x + 1 这种写法也能命中。下面 10 分钟,从零装好环境并跑通第一个真实场景。
⚡ 30 秒跑通:装好就跑第一条扫描
python3 -m pip install semgrep写一个两行的靶子文件 demo.py:
password = "123456" print(password)跑第一条扫描命令:
semgrep -e 'password = $X' --lang=py demo.py预期输出直接指向 demo.py 第 1 行,命中的 pattern 就是 password = $X。其中 $X 是元变量(占位符),匹配任意表达式。能出结果,说明装好了。
它到底能帮你解决什么
你给它一个目录,它还你一份问题清单。
semgrep --config auto .--config auto 按语言自动挑内置规则集。每条命中都带文件:行号、规则 id 和修复建议,扫 36 个文件通常只要几秒。
你给它一行伪代码,它还你所有变体。
semgrep -e '$X == $X' --lang=py .变量和自己比较,经典 bug。不管代码怎么拼,它都拦得住,这就是语义匹配和文本 grep 的区别。
你给它一个本地规则文件,它还你项目级约束。
本仓库根目录就放着一个真实规则文件 semgrep.yml:禁止在 OCaml 代码里直接 print,输出必须走统一日志函数。
semgrep --config semgrep.yml .自己写规则也是这个格式:id + pattern + message + severity,六行起步。
🔧 完整安装与环境配置
pip 方式(Ubuntu / WSL / macOS 通用)
python3 -m pip install semgrep需要 Python 3.8 以上。验证装好:
semgrep --versionHomebrew 方式(macOS)
brew install semgrep验证同样跑 semgrep --version。升级用 brew upgrade semgrep,别重装。
Docker 方式(不想装依赖)
docker run -it -v "${PWD}:/src" semgrep/semgrep semgrep --config auto /src命令直接打出扫描结果,就说明环境就绪。
从源码构建(改引擎或发版才需要)
git clone https://gitcode.com/GitHub_Trending/se/semgrep cd semgrep && make build构建完仍用 semgrep --version 验证。Makefile 里还有 make test,跑一遍确认全量测试通过。
配置:必须配的 + 强烈建议配的
不配任何配置也能扫。强烈建议配两条:
- 仓库里放一个 .semgrepignore,排除构建产物和锁文件
- 指标上报影响 CI 时加 --metrics=off 关掉
registry 地址、并行度这类其余选项,看官网文档的 CLI 参考即可。
⚠️ 新手最容易卡的 3 个坑
坑 1:文件明明有问题,却没被扫到。
原因:文件被 .semgrepignore 或 gitignore 规则过滤掉了。
解法:
semgrep ls列出所有真正会被扫描的文件,缺哪个就回头查排除文件。
坑 2:提示语言不支持或文件被跳过。
原因:文件扩展名没对上已知语言,或你没指定语言。
解法:显式加 --lang=py(或对应语言)再跑一遍。
坑 3:用 --config auto 或远程规则时报错。
原因:规则仓库需要登录,或网络不通。
解法:先跑 semgrep login;没账号就先用本地规则文件替代。
下一步
- 写自己的规则:tests/rules/ 里有 900 多条规则用例,每个 yaml 都配了测试文件,抄一个改改就能用
- 放进 CI:semgrep ci 只报当前 PR 引入的问题,不背历史债
- 污点规则、跨文件数据流这类进阶内容,看 Semgrep 官网文档
【免费下载链接】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),仅供参考