之前文章分别分析了 Grype 的整体执行流程、命令行配置系统和软件包发现过程。在 pkg.Provide() 返回 []pkg.Package 之后,runGrype() 会将这批软件包交给 VulnerabilityMatcher 执行漏洞匹配,最终生成一份扫描报告。在这一整条链路中,有三个数据结构贯穿始终:
Grype 源码分析 04:从目录和镜像到软件包清单
前两篇文章从 main() 和配置系统开始,建立了 Grype 的顶层调用框架。runGrype() 完成配置加载后,第一个关键步骤就是调用 pkg.Provide(),将用户输入转换成漏洞匹配引擎可以直接使用的 []pkg.Package。这篇文章将分析 Grype 如何把 dir:、docker:、registry:、sbom: 甚至一个 PURL 字符串统一为一个软件包集合。
Grype 源码分析 03:如何解析命令行和配置
上一篇文章从 main() 开始,跟踪了一次扫描如何进入 runGrype()。在真正加载漏洞数据库(Database,源码和日志中常简写为 DB)和收集软件包之前,还有一个重要步骤:把默认值、配置文件、profile(配置档)、环境变量和命令行参数合并成最终的 options.Grype。这篇文章我们将分析 Grype 是如何解析命令行和配置的。
Grype 源码分析 02:整体流程
上一篇文章介绍了 Grype 的基本用法。这篇文章开始分析 Grype 的源码实现,我们先不深入某一种漏洞如何匹配,而是从程序入口开始,跟踪执行一条扫描命令最后是如何获取漏洞结果的。通过分析扫描命令的执行流程,我们将建立 Grype 的整体调用链,为后续分析配置系统、软件包 Provider、漏洞数据库和 Matcher 打下基础。
Grype 源码分析 01:快速使用
Tree-sitter 快速入门
Tree-sitter 是一个用于解析源代码的工具和库,核心作者是 Max Brunsfeld。它的核心目标是:快速、增量地把代码转换成语法树(Syntax Tree)。它现在被很多编辑器、IDE、代码分析工具使用,例如 Atom(最初主要使用者)、Zed、GitHub 的代码高亮/代码跳转等等。上篇文章介绍的 Bearer SAST 工具就依赖于 Tree-sitter。
Bearer SAST 工具快速入门
kratos 源码分析 09:HTTP Transport(1)
前几篇文章我们已经详细分析了 kratos gRPC Transport 的实现原理,这篇文章我们将回到服务端,开始分析 kratos 的另一条核心传输链路:HTTP Transport。本文会先介绍 HTTP Transport 的整体设计,再深入 HTTP Server 的创建流程、路由注册、Filter 与 Middleware 的分层关系,以及一次 HTTP 请求在 kratos 中的完整处理链路。