软件包URL(purl,Package URL)是一个URL字符串,用于在编程语言、包管理器、包约定、工具、API和数据库中以最通用和统一的方式识别和定位软件包。purl是对现有方法进行标准化的尝试,以可靠地识别和定位软件包。 有望取代CPE成为软件包识别的统一标准。
1. 背景介绍
我们通过大量消费和生产软件包来构建和发布软件,如Maven、Gradle、NPM、RPM、Rubygems等。每个软件包管理器、平台、类型或生态系统都有自己的约定和协议来识别、定位和提供软件包。
当工具、API和数据库处理或存储多个包类型时,很难以统一的方式跨工具引用同一个软件包。
例如,这些工具、规范和API使用相对相似的方法来识别和定位软件包,每个软件包在语法、命名和约定方面都有细微的差异:
1、Sonatype 使用组件标识(component Identifier)来区分不能组件。
json
{
"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详解