ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Semgrep 安装与上手:5 分钟装好,用源码风格规则扫描 30+ 语言代码

Semgrep 安装与上手:5 分钟装好,用源码风格规则扫描 30+ 语言代码 Semgrep 安装与上手5 分钟装好用源码风格规则扫描 30 语言代码【免费下载链接】semgrepLightweight static analysis for many languages. Find bug variants with patterns that look like source code.项目地址: https://gitcode.com/GitHub_Trending/se/semgrepSemgrep 是一款快速的开源静态分析工具不运行代码只读懂代码结构来查找问题。它的规则写起来就是你日常写的源码支持 30 多种语言适合想在本地或 CI 里给项目加一道代码检查的开发者Python 3.10 即可开始。一、从痛点切入为什么文本搜索不够用场景你上线前想确认代码里没有残留的print调试语句于是grep print(全仓库一遍。它能搜到字面量但搜不到变体——缩进不同、参数多一行、被封装进别处的写法都会漏掉。Semgrep 的规则是长得像代码的代码$X $X表示左右两边是同一个表达式于是a b和get_user_id() get_user_id()这类自比较写法都能被命中。原理上它先解析出代码结构AST即语法树再做匹配所以它匹配的是语义而不是字符串。二、环境准备依赖最低要求说明Python3.10见 cli/pyproject.toml 的requires-pythonpip随 Python 自带用于安装 semgrep 命令行包网络可访问 PyPI首次安装需下载依赖如果你选择从源码构建而不是装现成包还需要 OCaml 工具链入口在根目录 Makefile构建细节见根 README.md。三、最快上手一行安装 一行验证pip install semgrep semgrep --version # 本仓库版本号为 1.174.0不写规则先跑一次自动扫描semgrep scan --config auto .auto会按你的语言从官方规则注册表拉取推荐规则集。扫描效果大致如下不想装环境也可以用 Docker 跑同一件事docker run -it -v ${PWD}:/src semgrep/semgrep semgrep scan --config auto /src四、最小可用配置在仓库根目录建一个my_rules.yml四条必填项就能工作rules: - id: no-print-in-prod # 规则唯一标识报错时会显示它 languages: [python] # 只检查 Python 文件 pattern: print(...) # 要匹配的写法... 表示任意参数 message: 生产代码请改用 logger 代替 print severity: WARNING # 严重级别ERROR / WARNING运行方式semgrep scan --config my_rules.yml .仓库自己就在用这种写法semgrep.yml 里有十几条自研规则比如禁止顶层直接读环境变量否则测试没法 mock。规则编辑器界面长这样左侧写规则、右侧即时验证命中五、进阶与团队协作接进 CI流水线里跑semgrep ci它会自动只报告当前提交引入的新问题存量问题不阻塞合并。自动选规则--config auto按语言组合官方推荐规则不用自己维护规则清单。让 AI 助手也能扫描跑semgrep mcp启动 MCP 服务给 AI 编程工具提供工具的协议实现和入口在 cli/src/semgrep/mcp/。关掉遥测加--metricsoff默认情况下用本地规则文件时不会上传任何代码代码始终在本地或你的构建环境里分析。六、常见问题速答Q我的代码会被上传吗默认不会。扫描在本地执行只有登录远端配置且开启指标时才会上报匿名统计--metricsoff可完全关闭。QCI 里退出码为什么是 11 表示发现了阻塞级问题正是你要的行为——流水线据此判失败。通用致命错误用退出码 2。Q$X、...是什么意思以$开头的是元变量代表任意表达式...代表任意长度的部分写规则时直接当占位符用即可。QPython 3.8 能用吗不能当前要求 3.10这是安装时的硬性门槛。延伸入口入门与完整文档README.md仓库自用的规则示例semgrep.yml版本变更记录CHANGELOG.md忽略扫描范围的配置.semgrepignore【免费下载链接】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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进