news 2026/9/10 17:28:59

Semgrep 安装与配置:30 秒跑通第一次代码扫描

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Semgrep 安装与配置:30 秒跑通第一次代码扫描

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 --version

Homebrew 方式(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,跑一遍确认全量测试通过。

配置:必须配的 + 强烈建议配的

不配任何配置也能扫。强烈建议配两条:

  1. 仓库里放一个 .semgrepignore,排除构建产物和锁文件
  2. 指标上报影响 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 17:26:52

Qt集成x11vnc实现双向远程桌面开发指南

1. 项目背景与核心需求在Linux桌面应用开发中,Qt框架因其跨平台特性和丰富的组件库被广泛使用。而远程桌面技术则是实现跨设备操作的关键基础设施。将两者结合实现双向内嵌的远程桌面功能,能够为分布式系统、远程运维、协同办公等场景提供更流畅的用户体…

作者头像 李华
网站建设 2026/9/10 17:26:26

Arm Cortex-M如何成为端侧AI智能代理基座

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 17:25:35

LDRA Testbed静态代码分析工具在安全关键领域的应用

1. Testbed静态分析工具概述LDRA Testbed作为工业级静态代码分析工具,在航空、汽车、医疗等安全关键领域已有40余年应用历史。其核心价值在于通过系统化的代码质量检测,帮助开发团队在早期发现潜在缺陷,降低软件失效风险。不同于动态测试需要…

作者头像 李华
网站建设 2026/9/10 17:24:41

STM32标准库SPI+DMA实战:原理、配置与高效传输指南

简介:面向 STM32F103 标准库开发者的 SPI 与 DMA 联合传输示例代码,适合嵌入式初学者及需要优化外设数据搬运效率的工程师,旨在解决传统阻塞式 SPI 传输长期占用 CPU 的问题。资源围绕 SPI 主模式初始化、DMA 通道参数配置、外设与内存地址映…

作者头像 李华