安全术语 | 软件包purl详解:跨工具、数据库、API和语言之间可靠地识别和定位软件包

软件包URL(purl,Package URL)是一个URL字符串,用于在编程语言、包管理器、包约定、工具、API和数据库中以最通用和统一的方式识别和定位软件包。purl是对现有方法进行标准化的尝试,以可靠地识别和定位软件包。 有望取代CPE成为软件包识别的统一标准。

1. 背景介绍

我们通过大量消费和生产软件包来构建和发布软件,如Maven、Gradle、NPM、RPM、Rubygems等。每个软件包管理器、平台、类型或生态系统都有自己的约定和协议来识别、定位和提供软件包。

当工具、API和数据库处理或存储多个包类型时,很难以统一的方式跨工具引用同一个软件包。

例如,这些工具、规范和API使用相对相似的方法来识别和定位软件包,每个软件包在语法、命名和约定方面都有细微的差异:

1、Sonatype 使用组件标识(component Identifier)来区分不能组件。

{
  "components": [
    {
        "componentIdentifier": {
        "format": "maven",
        "coordinates": {
          "artifactId": "tomcat-util",
          "extension": "jar",
          "groupId": "tomcat",
          "version": "5.5.23"
         }
      }
    }
  ]
}

2、JFrog XRay 的组件命名采用包类型、命名空间、名称和版本的约定进行格式化。

不同包类型软件包命名

3、Library.io使用平台、名称和版本区分组件。

2. purl解决方案

软件包URL(purl,Package URL)是一个URL字符串,用于在编程语言、包管理器、包约定、工具、API和数据库中以最通用和统一的方式识别和定位软件包。purl是对现有方法进行标准化的尝试,以可靠地识别和定位软件包。

purl基于熟悉的URL字符串的表达语法,这些字符串对人类和机器来说都很容易识别,并且可以在编程语言、包管理器、封装约定、工具、API和数据库之间一致工作。

主要可用于以下场景:

  • 为了在仓库和扫描工具之间可靠地引用相同的软件包;
  • 在跨多个包管理器收集、编目和监视包信息(如版本、依赖关系、许可等)的跨系统元数据索引、聚合或警报系统中;
  • 当跟踪包或其依赖项的已知漏洞并最终将代码包的多个化身跨包系统关联起来时;
  • 以及许多其他类型的分析,例如构建包的依赖图等。

若想了解更多细节,还可以查看FOSDEM 2018会议上的关于purl的宣讲PPT材料:

  • meet_purl_FOSDEM_2018_narrow.pdf (共18页,访问密码: 6277)

3. purl 规范细则

purl即Package url,purl是由七个组件组成的URL:

scheme:type/namespace/name@version?qualifiers#subpath

组件由一个特定的字符分隔,以便进行明确的解析。

每个组件的定义如下:

  • scheme:这是URL方案,常数值为“pkg”。这个单一方案的主要原因之一是为了方便将来对包URL的“pkg”方案进行正式注册。必需。
  • type:包“type”或包“protocol”,如maven、npm、nuget、gem、pypi等。必需。
  • namespace:一些名称前缀,如Maven groupid、Docker镜像所有者、GitHub用户或组织。可选且特定于类型。
  • name:包的名称。必修的。
  • version:包的版本。可选择的
  • 限定符:包的额外限定数据,如操作系统、体系结构、发行版等。可选且特定于类型。
  • 子路径:包中相对于包根的额外子路径。可选择的

组件的设计使其形成从左侧最重要组件到右侧最不重要组件的层次结构。

注意: purl不得包含URL授权,即不支持用户名、密码、主机和端口组件。名称空间段有时可能看起来像主机,但其解释是特定于某个类型的。

purl样例(包含了maven、docker、github、gem及python组件):

pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1
pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=pom
pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources
pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?type=zip&classifier=dist
pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x86&type=dll
pkg:maven/net.sf.jacob-projec/jacob@1.14.3?classifier=x64&type=dll

pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c

pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie

pkg:docker/cassandra@sha256:244fd47e07d1004f0aed9c
pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io

pkg:gem/jruby-launcher@1.1.2?platform=java
pkg:gem/ruby-advisory-db-check@0.12.4

pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c

pkg:golang/google.golang.org/genproto#googleapis/api/annotations

pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?packaging=sources
pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?repository_url=repo.spring.io%2Frelease

pkg:npm/%40angular/animation@12.3.1
pkg:npm/foobar@12.3.1

pkg:nuget/EnterpriseLibrary.Common@6.0.1304

pkg:pypi/django@1.11.1

pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25
pkg:rpm/opensuse/curl@7.56.1-1.1.?arch=i386&distro=opensuse-tumbleweed

4. 规范详细信息

purl规范由核心语法定义和独立类型定义组成:

  • purl核心:定义用于表示和验证purl的版本化和形式化格式、语法和规则。详细信息可参阅 https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst
  • purl类型定义:定义独立于核心规范的purl类型(例如maven、npm、cargo、rpm等)。定义还包括为将来使用而保留的类型。详细信息可参阅 https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst

5. 参考链接

  • https://github.com/package-url/purl-spec
  • https://www.softwaretransparency.org/osskb
  • https://github.com/orgs/scanoss/repositories?
  • https://help.sonatype.com/en/component-details-rest-api.html
  • https://jfrog.com/help/r/xray-rest-apis/introduction-to-the-xray-rest-apis
  • https://mirroronet.pl/pub/mirrors/FOSDEM/2018/K.3.201/purl.mp4

推荐阅读:

  • 「 网络安全常用术语解读 」软件物料清单SBOM详解
  • 「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解
  • 「 网络安全常用术语解读 」SBOM主流格式SPDX详解
  • 「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解
  • 「 网络安全常用术语解读 」漏洞利用交换VEX详解
  • 「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐
  • 「 网络安全常用术语解读 」什么是0day、1day、nday漏洞
  • 「 网络安全常用术语解读 」软件物料清单SBOM详解
  • 「 网络安全常用术语解读 」杀链Kill Chain详解
  • 「 网络安全常用术语解读 」点击劫持Clickjacking详解
  • 「 网络安全常用术语解读 」悬空标记注入详解
  • 「 网络安全常用术语解读 」内容安全策略CSP详解
  • 「 网络安全常用术语解读 」同源策略SOP详解
  • 「 网络安全常用术语解读 」静态分析结果交换格式SARIF详解
  • 「 网络安全常用术语解读 」安全自动化协议SCAP详解
  • 「 网络安全常用术语解读 」通用平台枚举CPE详解
  • 「 网络安全常用术语解读 」通用缺陷枚举CWE详解
  • 「 网络安全常用术语解读 」通用漏洞披露CVE详解
  • 「 网络安全常用术语解读 」通用配置枚举CCE详解
  • 「 网络安全常用术语解读 」通用漏洞评分系统CVSS详解
  • 「 网络安全常用术语解读 」通用漏洞报告框架CVRF详解
  • 「 网络安全常用术语解读 」通用安全通告框架CSAF详解
  • 「 网络安全常用术语解读 」漏洞利用交换VEX详解
  • 「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐
  • 「 网络安全常用术语解读 」通用攻击模式枚举和分类CAPEC详解
  • 「 网络安全常用术语解读 」网络攻击者的战术、技术和常识知识库ATT&CK详解
  • 「 网络安全常用术语解读 」静态应用安全测试SAST详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/655691.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MagicLens:新一代图像搜索技术和产品形态

MagicLens:Self-Supervised Image Retrieval with Open-Ended Instructions MagicLens: 自监督图像检索与开放式指令 作者:Kai Zhang, Yi Luan, Hexiang Hu, Kenton Lee, Siyuan Qiao, Wenhu …

vue组件-----路由系统

能够说出单页面概念和优缺点能够掌握vue-router路由系统能够掌握声明式导航和编程式导航能够掌握路由嵌套和守卫 一.Vue路由简介和基础使用 1.生活中的路由 目标:设备和ip的映射关系 2.nodejs路由 目标:接口和服务的映射关系 3.前端路由 目标&#…

短视频内容创意方法有哪些?成都科成博通文化传媒公司

短视频内容创意方法有哪些? 随着移动互联网的迅猛发展,短视频平台已成为人们日常生活中不可或缺的一部分。短视频以其短平快的特点,迅速吸引了大量用户。然而,面对海量的短视频内容,如何让自己的作品脱颖而出&#xf…

【Linux】Linux的权限_2 + Linux环境基础开发工具_1

文章目录 三、权限3. Linux权限管理修改文件的拥有者和所属组 4. 文件的类型5. 权限掩码 四、Linux环境基础开发工具1. yumyum 工具的使用 未完待续 三、权限 3. Linux权限管理 修改文件的拥有者和所属组 在上一节我们讲到如何更改文件的访问权限,那我们需要更改…

二十九、openlayers官网示例DeclutterGroup解析——避免矢量图层的文字重叠

官网demo地址: Declutter Group 这篇说的是如何设置矢量图层上多数据点文字不重叠。 主要是属性declutter ,用于处理矢量图层上重叠的标注和符号,为true时启用去重叠功能。所有矢量特征的标注和符号都会被处理以避免重叠。false则与之相反。…

提升(或降低)插入的内容的位置:\raisebox

\raisebox 是 LaTeX 中的一个命令&#xff0c;用于提升&#xff08;或降低&#xff09;插入的内容&#xff08;如文本、图像等&#xff09;的位置。该命令可以用于调整垂直位置&#xff0c;使内容相对于周围内容上下移动。 语法如下&#xff1a; \raisebox{<distance>}…

宝藏网站推荐-封面图片生成器

封面图片生成器&#xff1a;封面图生成器 | 太空编程 (spacexcode.com)[https://spacexcode.com/coverview] 由来 最近爱上了写文案&#xff0c;在网上冲浪的时候发现一个宝藏网站。Spacecode&#xff0c;一个大神维护的个人网站&#xff0c;含有前端知识库、个人博客及他做…

轻松拿捏C语言——自定义类型之【结构体】

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 1. 结构体类型的…

攻击同学网络,让同学断网

技术介绍&#xff1a;ARP欺骗 ARP欺骗&#xff08;ARP spoofing&#xff09;是一种网络攻击技术&#xff0c;它通过伪造ARP&#xff08;地址解析协议&#xff09;响应包来欺骗目标设备&#xff0c;使其将网络流量发送到攻击者指定的位置。具体操作步骤如下&#xff1a; 攻击者…

C# 中 async 与 await 关键字详解

async 和 await 关键字的作用是使方法能够异步执行并等待异步操作的完成。&#xff08;最重要的一点是记住 “异步执行”与“等待异步操作完成”&#xff0c;不是等待主线程操作完成&#xff09; async 修饰符可将 方法、lambda 表达式或匿名方法指定为异步。 async 关键字用于…

MySQL:数据库基础操作

一、MySQL的机制 相信翻到这篇文章的你&#xff0c;应该也是来怀着大大的好奇&#xff0c;来学习MySQL这门语言&#xff0c;那么&#xff0c;现在&#xff0c;就让我和大家一起来学习这门语言吧&#xff01; 这此之前&#xff0c;我们先要了解一个事实&#xff0c;MySQL其实是划…

微服务架构-分支微服务设计模式

微服务架构-分支微服务设计模式 这种模式是聚合器模式的扩展&#xff0c;允许同时调用两个微服务链 分支微服务设计模式是一种用于构建大型系统的微服务架构模式&#xff0c;其核心思想是 将复杂的业务逻辑拆解为多个小的、相互独立的子系统&#xff0c;每个子系统由一个或多…

【iOS】didReceiveMemoryWarning实例方法

iPhone下每个App可用的内存是被限制的&#xff0c;如果一个App使用的内存超过20M&#xff0c;则系统会向该App发送Memory Warning&#xff08;内存警告&#xff09;消息&#xff0c;收到此消息后&#xff0c;App必须正确处理&#xff0c;否则可能出错或出现内存泄漏。 目录 流程…

代码随想录算法训练营day14|二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代法

二叉树的递归遍历 首先需要明确的一点是&#xff0c;前序中序和后序在二叉树的递归遍历中的区别仅在于递归函数中操作的顺序&#xff0c;前序是在遍历一个节点的左右子树前进行操作&#xff0c;中序是在遍历一个节点的左子树后进行操作再遍历右子树&#xff0c;而后序是在遍历…

3D点云焊缝提取 平面交线 投影

文章目录 1. 效果2. 思路3. 源码 1. 效果 2. 思路 计算点云法向量&#xff1b;计算点云位姿Pose;翻转Pose中的Z轴方向&#xff0c;使其一致&#xff1b;通过Pose的Z轴对点云进行方向过滤&#xff1b;对点云聚类&#xff1b;根据目标点云的高度提取目标点云&#xff1b;提取两块…

云计算-Amazon S3

亚马逊S3&#xff08;Amazon S3&#xff09; 亚马逊S3是一种云对象存储设施。我们将使用的对象将是您在个人计算机上常用的文件。亚马逊S3产品旨在可扩展到实际无限数量的对象和无限大小的对象&#xff0c;但我们在本实验室的练习中只会使用少量对象。当存储许多对象时&#xf…

微服务架构下的‘黑带’安全大师:Spring Cloud Security全攻略!

深入探讨了微服务间的安全通信、安全策略设计以及面对经典安全问题的应对策略。无论你是微服务的新手还是资深开发者&#xff0c;都能在本文中找到提升安全功力的秘籍。让我们一起成为微服务架构下的‘黑带’安全大师&#xff01; 文章目录 1. 引言微服务安全挑战与重要性Sprin…

前后端 | 低代码平台之 Erupt

前文提要 最近大家是不是都有那种危机感&#xff0c;项目变多了&#xff0c;工时压紧了&#xff0c;老板说&#xff0c;我不管你加不加班&#xff0c;我只看结果&#xff0c;项目经理说&#xff0c;我不管你用什么技术栈&#xff0c;我只要没BUG&#xff0c;测试说&#xff0c…

【SQL学习进阶】从入门到高级应用(一)

文章目录 MySQL命令行基本命令数据库表的概述初始化测试数据熟悉测试数据 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f49d;希望您在这里可以感受到一份轻松愉快的氛围&#x…

算法002:复写零

力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/duplicate-zeros/ 使用 双指针 来解题&#xff1a; 具体思路 如果是和00…