osv-scanner 包弃用检测实战:用 --experimental-flag-deprecated-packages 识别 Deprecated 与 Yanked 依赖
osv-scanner 包弃用检测实战用 --experimental-flag-deprecated-packages 识别 Deprecated 与 Yanked 依赖【免费下载链接】osv-scannerVulnerability scanner written in Go which uses the data provided by https://osv.dev项目地址: https://gitcode.com/GitHub_Trending/os/osv-scanner本文是 osv-scanner 实验性功能包弃用检测Flag Deprecated Packages的完整使用指南。该功能在常规漏洞扫描之外额外识别依赖中被作者标记为已弃用Deprecated或从软件源注册表中撤下Yanked的软件包覆盖项目源码扫描与容器镜像扫描两类场景。读完本文你将掌握该实验性标志的启用方式、五种输出格式下的呈现形态以及从 deps.dev 数据源到各输出器的底层实现链路。功能概述扫描不再被维护的依赖传统的漏洞扫描只关注存在已知安全漏洞的依赖而弃用检测关注的是作者已放弃或从仓库移除的依赖。两者互补一个弃用包即便暂时没有已知漏洞也可能意味着它不再接收安全修复、存在供应链维护风险。OSV-Scanner 通过--experimental-flag-deprecated-packages标志开启该能力其数据来源于 deps.dev API该 API 聚合了多个软件生态的包元数据。需要说明的是该功能当前属于实验性特性文档中标注为 Experimental且明确不支持在spdx格式下输出。从源码看该标志在 flags.go 中被定义为布尔开关cli.BoolFlag{ Name: experimental-flag-deprecated-packages, Usage: report if package versions are deprecated, },其值经由 getters.go 中的GetExperimentalScannerActions读取并传入扫描动作func GetExperimentalScannerActions(cmd *cli.Command) osvscanner.ExperimentalScannerActions { return osvscanner.ExperimentalScannerActions{ PluginsEnabled: cmd.StringSlice(experimental-plugins), PluginsDisabled: cmd.StringSlice(experimental-disable-plugins), PluginsNoDefaults: cmd.Bool(experimental-no-default-plugins), FlagDeprecatedPackages: cmd.Bool(experimental-flag-deprecated-packages), } }Deprecation Statusdeprecated 字段的两种含义检测结果的载体是package对象上的deprecated字段它是一个布尔值为true表示该软件包被标记为不受支持。该状态包含但不限于以下两类情形Deprecated已弃用软件包作者主动标记该包或某个版本为弃用状态通常意味着作者建议迁移到替代方案。Yanked已撤回软件包已从软件源注册表中移除。例如 npm 生态中发布后又被撤下的版本这类版本通常不能再被正常安装或引用。在数据模型层面该字段定义于 results.go 的PackageInfo结构体中type PackageInfo struct { Name string json:name OSPackageName string json:os_package_name,omitempty Version string json:version Ecosystem string json:ecosystem Commit string json:commit,omitempty Deprecated bool json:deprecated,omitempty ImageOrigin *ImageOriginDetails json:image_origin_details,omitempty Inventory *extractor.Package json:- }注意其 JSON 标签带omitempty当包未被标记弃用时该字段在 JSON 输出中会被省略这与文档中未检测到弃用包时省略对应字段的行为一致。项目源码扫描对本地项目目录执行扫描时在scan source子命令后追加该标志即可osv-scanner scan source --experimental-flag-deprecated-packages -r /path/to/project-r表示递归扫描目录及其子目录下的所有锁文件与清单文件。该命令会同时报告漏洞与弃用包退出码与常规扫描相同检测到问题时为非 0。更完整的源码扫描用法参见 Project Source Scanning。仓库自带的集成测试 command_test.goTestCommand_FlagDeprecatedPackages覆盖了四种典型场景测试数据位于 exp-plugins-pkgdeprecate 目录下测试用例输入预期行为package_deprecated_false_no_vuln_jsonclean/Cargo.lock无弃用包、无漏洞退出码 0package_deprecated_true_no_vuln_jsondeprecated-novuln/Cargo.lock存在弃用包但无漏洞退出码 1package_deprecated_true_with_vuln_jsondeprecated-vuln/Cargo.lock弃用包与漏洞并存退出码 1package_deprecated_npm_jsondeprecated-npm/package-lock.jsonnpm 生态弃用包检测退出码 1可见弃用包本身就会被视为需要处理的问题计入非零退出码而不仅是信息提示。容器镜像扫描scan image子命令同样支持该标志可扫描本地或远程镜像以及导出的镜像归档文件# 按名称扫描本地或远程镜像 osv-scanner scan image --experimental-flag-deprecated-packages my-image:tag # 扫描导出的镜像归档文件 osv-scanner scan image --experimental-flag-deprecated-packages --archive ./path/to/my-image.tar其中my-image:tag为镜像名与标签--archive指定通过docker save等工具导出的 tar 归档。镜像场景的集成测试见 image/command_test.go。更完整的镜像扫描说明参见 Container Image Scanning。输出格式五种呈现形态开启该标志后弃用包信息会按所选输出格式分别呈现Table / Markdown / HTML输出一个专门的弃用包分区dedicated section列出所有弃用包此外在表格视图中只要存在弃用包主表会追加一列Deprecated用True/--标识每个包是否弃用实现见 table.go。JSON在package对象中输出deprecated字段布尔值。SARIF在 Affected Packages 表格中增加 Deprecated 列实现见 sarif.go。CycloneDX在component中输出deprecated属性实现见 cyclonedx_common.go。GitHub Actions 注解作为补充githubannotation.go 也会在注解输出中包含弃用状态。若未检测到任何弃用包则对应分区、列或字段会被整体省略不会输出空章节。以下是文档给出的 JSON 输出示例{ results: [ { source: { path: /path/to/lockfile, type: lockfile }, packages: [ { package: { name: deprecated-package, version: 1.0.0, ecosystem: npm, deprecated: true } }, { package: { name: not-deprecated-package, version: 2.0.0, ecosystem: npm } } ] } ] }注意示例中第二个包因未弃用而没有deprecated字段这正是omitempty标签的实际效果。底层实现链路从数据源到输出从源码结构看弃用检测的完整数据流可以梳理为以下四个阶段标志解析CLI 层读取--experimental-flag-deprecated-packages通过GetExperimentalScannerActions注入扫描配置getters.go。元数据获取扫描过程中通过 deps.dev API 查询各依赖包的弃用状态并将结果写入PackageInfo.Deprecated字段。结果扁平化在 results.go 的Flatten()方法中弃用包与漏洞、许可证违规一起被展开为独立的扁平化结果条目便于下游各输出器统一处理if pkg.Package.Deprecated { results append(results, VulnerabilityFlattened{ Source: res.Source, Package: pkg.Package, Deprecated: pkg.Package.Deprecated, }) }统计与渲染output_result.go 在聚合阶段累计PkgDeprecatedCount各输出器表格、JSON、SARIF、CycloneDX、GitHub 注解依据该计数与每个包的Deprecated布尔值决定是否渲染对应列、分区或字段。此外包去重与分组环节也会透传弃用状态见 package_grouper.go确保同一包在多个来源中出现时弃用标记不会丢失。适用前提与限制该功能依赖 deps.dev API 提供包元数据因此离线环境下无法获取弃用信息使用时应确保网络可达。输出格式为spdx时不支持弃用报告需改用上述五种格式之一。功能当前标记为实验性Experimental标志名以experimental-前缀区分后续版本可能调整。弃用检测与漏洞检测相互独立一个包可能已弃用但无漏洞见deprecated-novuln测试也可能已弃用且存在漏洞见deprecated-vuln测试两者都应纳入依赖维护决策。小结包弃用检测为 osv-scanner 的依赖治理补上了维护健康度这一维度--experimental-flag-deprecated-packages让开发者以零成本的方式识别那些被作者放弃或从仓库撤回的依赖并借助 JSON、SARIF、CycloneDX、表格、Markdown、HTML 等多种输出与 CI/CD 流程集成。建议结合 usage.md、output.md 与 experimental.md 了解完整的命令体系与输出定制方式。【免费下载链接】osv-scannerVulnerability scanner written in Go which uses the data provided by https://osv.dev项目地址: https://gitcode.com/GitHub_Trending/os/osv-scanner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

knowledge-work-plugins Sales 插件指南:用 Cowork 驱动从商机研究到预测的完整销售工作流

knowledge-work-plugins Sales 插件指南:用 Cowork 驱动从商机研究到预测的完整销售工作流

knowledge-work-plugins Sales 插件指南:用 Cowork 驱动从商机研究到预测的完整销售工作流 【免费下载链接】knowledge-work-plugins Open source repository of plugins primarily intended for knowledge workers to use in Claude Cowork 项目地址: https://gi…

2026/11/15 17:23:00 阅读更多 →
赞助与商业模式:ai-engineering-from-scratch 如何靠 Sponsorship 维持 511 节课

赞助与商业模式:ai-engineering-from-scratch 如何靠 Sponsorship 维持 511 节课

赞助与商业模式:ai-engineering-from-scratch 如何靠 Sponsorship 维持 511 节课 【免费下载链接】ai-engineering-from-scratch Learn it. Build it. Ship it for others. 项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-from-scratch a…

2026/11/15 17:23:00 阅读更多 →
用 wechat-bot 实现 AI 微信机器人:从扫码登录到多引擎自动回复的完整实操指南

用 wechat-bot 实现 AI 微信机器人:从扫码登录到多引擎自动回复的完整实操指南

用 wechat-bot 实现 AI 微信机器人:从扫码登录到多引擎自动回复的完整实操指南 【免费下载链接】wechat-bot 🤖 Multi-platform IM AI Agent for Telegram, WhatsApp, Lark, and WeChat. Connects ChatGPT / Claude / Kimi / DeepSeek / Ollama / Pi for…

2026/10/25 7:18:23 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/15 5:13:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/15 5:13:35 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/15 5:13:35 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/15 3:37:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/15 4:18:38 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/15 5:13:35 阅读更多 →

日新闻

周新闻

月新闻